SwiftUI

@FocusState

Phililip
728x90

안녕하세요.

 

이번에는 SwiftUI의 @FocusState라는 프로퍼티 래퍼에 대해 알아볼게요.

 

 


# @FocusState는 현재 포커스(커서) 위치 또는 상태를 나타냅니다.

@FocusState 프로퍼티 래퍼로 선언된 값은 현재 포커스의 위치나 상태를 의미합니다.

 

@FocusState 프로퍼티를 사용할 때는 focused라는 수식어를 함께 사용합니다.

 

 

@FocusState 변수에 값을 대입하면 그 값에 대응하는 특정 뷰로 포커스가 이동하게 됩니다.

 

마찬가지로 사용자가 임의로 포커스를 다른 뷰로 이동시키면 @FocusState 변수값도 자동으로 바뀌게 됩니다.

 

@FocusState 변수값에 nil 또는 false 값을 대입하면 포커스가 사라지게 됩니다.

 

 

뭔가... 말로 설명하는 게 어렵네요...;;;

 

 

예시로 설명 대체할게요^^

(@FocusState는 Xcode 14.1 기준으로 Preview에서는 테스트를 할 수 없으니, 시뮬레이터나 디바이스로 테스트해야 합니다!)

 

 

잘 동작하죠??? ㅎㅎㅎ 👍 👍 👍

 

 

 

위의 예시는 상황에 따라 포커스를 줘야 하는 곳이 다르기 때문에 @FocusState 변수 타입을 enum으로 설정했습니다.

 

만약, 포커스 줄 곳이 하나밖에 없다면 @FocusState 변수 타입을 아래처럼 Boolean 타입으로 설정해도 됩니다.

 

 

 

지금까지는 화면 구성이 달라지지 않을 때 @FocusState 프로퍼티 래퍼를 활용하여 포커스를 주는 방법에 대해 알아봤어요.

 

만약, 화면 구성이 특정 상황(ex. 사용자가 버튼을 누를 때마다 TextField 추가 등)에 따라 달라지는 경우라면 enum의 Associated Value를 활용하면 쉽게 처리할 수 있습니다.

 

 

 

 

 

 

# 참고

- https://developer.apple.com/documentation/swiftui/focusstate

- https://developer.apple.com/videos/play/wwdc2021/10023/

- https://peterfriese.dev/posts/swiftui-list-focus/

 

 


 

이번 글은 여기서 마무리.

 

 

 

반응형

'SwiftUI' 카테고리의 다른 글

contentShape  (1) 2023.01.03
ScenePhase  (5) 2022.12.26
텍스트 길이에 맞춰서 자식뷰의 width를 통일시키는 방법  (0) 2022.06.18
View Identity와 transition 관계  (0) 2022.06.17
TimelineView  (0) 2022.06.17