안녕하세요.
이번에는 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 |