我有一个SwiftUI
Form
包含 a Picker
、 aTextField
和 a 的 a 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:
我能够轻松地选择选择器中的第二项,如下所示:
在下面,您可以看到我可以通过点击 来启动文本输入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()
}
下面,以下两个屏幕截图显示了TextField
能够成为第一响应者并显示键盘。当在 之外点击时,键盘会成功关闭TextField
:
但是,当尝试选择“选择器”的不同部分时,键盘不会关闭。事实上,即使在键盘被关闭后,我也无法选择不同的段。我认为无法选择不同的段,因为附加到表单的点击手势阻止了选择。
Picker
以下屏幕截图显示了在显示键盘并实现点击手势时尝试选择第二个值的结果:
我可以做些什么来允许选择 的Picker
段,同时允许在键盘之外点击时关闭键盘TextField
?