疑問点
-
FocusStateがtrueの状態で画面をタップした際にキーボードを非表示にする処理を実装していた際、親ViewのonTapGesture()の中で明示的にFocusStateをfalseにすることでキーボードを非表示にできた。 -
.focused修飾子を付与したTextField等をタップしたら@FocusStateは自動的にtrueになっている印象がある。その逆も然り。 - ん?
FocusStateってTextFieldはタップすることで自動的にtrueとfalseを切り替えられるのなら、明示的にfocusstate = trueやfocusstate = falseを書かなくてもいいということ?
コード
// Component
TextEditor(text: /* 省略 */)
.focused($isFocused)
// Parent
struct ParentView {
@FocusState var isFocused: Bool
var body: some View {
VStack {
Component(isFocused: isFocused)
}
.onTapGesture {
isFocused = false
}
}
}
解説
- ユーザーの操作に応じてバインドされたブール値を自動的に更新する一方で、その値をコードで直接設定することも可能。
- これによって、フォーカスをプログラムから制御することもできるとのこと。
まとめ
・デフォルトではFocusStateは自動的に切り替える
・明示的に切り替えることもできる