a 、 a 、および aをSwiftUI
Form
含む a があります。Picker
TextField
Text
struct ContentView: View {
var body: some View {
Form {
Section {
Picker(selection: $selection, label: label) {
// Code to populate picker
}.pickerStyle(SegmentedPickerStyle())
HStack {
TextField(title, text: $text)
Text(text)
}
}
}
}
}
上記のコードは、次の UI になります。
以下に示すように、ピッカーで 2 番目の項目を簡単に選択できます。
以下では、 をタップしてテキスト入力を開始できることがわかりますTextField
。
Picker
値が更新されたときにキーボードを閉じるために、Binding
が追加されました。これは、次のコード ブロックで確認できます。
Picker(selection: Binding(get: {
// Code to get selected segment
}, set: { (index) in
// Code to set selected segment
self.endEditing()
}), label: label) {
// Code to populate picker
}
への呼び出しself.endEditing()
は、次のメソッドで提供されます。
func endEditing() {
sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
}
次のスクリーンショットは、キーボードの別のセグメントを選択するとPicker
キーボードが消えることを示しています。
この時点まで、すべてが期待どおりに機能します。ただし、スクロールビューを含むをTextField
ドラッグするときにキーボードを閉じる方法がわからないため、の外側をタップするとキーボードを閉じたいと思います。Form
をタップしたときにキーボードを閉じるために、次の実装を追加しようとしましたForm
。
Form {
Section {
// Picker
HStack {
// TextField
// Text
}
}
}.onTapGesture {
self.endEditing()
}
以下の 2 つのスクリーンショットは、TextField
がファーストレスポンダーになり、キーボードを表示できることを示しています。の外側をタップすると、キーボードが正常に閉じられTextField
ます。
ただし、ピッカーの別のセグメントを選択しようとしても、キーボードは消えません。実際、キーボードを閉じた後でも、別のセグメントを選択することはできません。フォームに添付されたタップジェスチャが選択を妨げているため、別のセグメントを選択できないと思います。
Picker
次のスクリーンショットは、キーボードが表示され、タップ ジェスチャが実装されている間にで 2 番目の値を選択しようとした結果を示しています。
Picker
の外側をタップしたときにキーボードを閉じることができるようにしながら、 のセグメントを選択できるようにするにはどうすればよいTextField
ですか?