반응형
iOS15+에서 지원되는 프로퍼티래퍼에요
포커스되는 상태를 관리할 수 있는 타입이에요
대표적으로 텍스트필드에서 자주쓰이죠
텍스트필드를
포커스했을때, 리턴했을때를 구분해야하는데
iOS15 미만에선
onCommit, onEditingChanged 를 통해서 관리했지만
iOS15+ 부터는
@FocusState와 onSubmit onChange를 이용해요
예시를 만들어봤어요
struct TextFieldTest: View {
@frozen
enum FocusType: Hashable {
case textfield1
case textfield2
}
@State private var text: String = ""
@FocusState private var focus: FocusType?
var body: some View {
VStack {
TextField("타이틀1", text: $text)
.submitLabel(.done)
.focused($focus, equals: .textfield1)
TextField("타이틀2", text: $text)
.focused($focus, equals: .textfield2)
}
// focus될때 실행됨(텍스트필드 클릭시)
.onChange(of: focus) { focusType in
guard let focusType = focusType else { return }
switch focusType {
case .textfield1:
print("위 텍스트필드")
case .textfield2:
print("아래 텍스트필드")
}
}
// 리턴버튼 클릭시 실행됨
.onSubmit {
guard let focus = focus else { return }
switch focus {
case .textfield1:
print("위 텍스트필드 리턴")
case .textfield2:
print("아래 텍스트필드 리턴")
}
}
}
}
FocusState값은 Hashable한 값이와야해요
enum으로 FocusState값이될 타입을 선언하고
focused()를통해서 각 텍스트필드마다 지정해줘요
그게 끝이에요
그리고 변화를 감지할땐
onSubmit - 리턴버튼 클릭시에 실행되는 구문
onChange - focusType이 텍스트필드가 포커스될때 변경되므로 여기서 관찰할수있죠 따라서 텍스트필드 포커스시 실행되는 구문이죠
반응형
'iyOmSd > Title: SwiftUI' 카테고리의 다른 글
[SwiftUI] 분리된 프레임워크(모듈) 리소스(Font, Color, Image)접근 (0) | 2023.02.24 |
---|---|
[SwiftUI] Widget LiveActivity (feat. Dynamic Island) 잠금화면 기능 (2) | 2023.01.14 |
[SwiftUI] TextField Placeholder (0) | 2022.10.26 |
[SwiftUI] ScrollView Offset (1) | 2022.09.07 |
[SwiftUI] Animation과 Transition (0) | 2022.08.19 |