【发布时间】:2020-06-06 11:50:47
【问题描述】:
我在视图中有一个TextField 和一些可操作的元素,例如Button、Picker。当使用在TextField 之外敲击时,我想关闭键盘。使用this question 中的答案,我做到了。然而,问题出现在其他可操作的项目上。
当我点击Button 时,会发生操作,但不会关闭键盘。与Toggle 开关相同。
当我点击 SegmentedStyle Picker 的一个部分时,键盘被关闭,但选择器选择没有改变。
这是我的代码。
struct SampleView: View {
@State var selected = 0
@State var textFieldValue = ""
var body: some View {
VStack(spacing: 16) {
TextField("Enter your name", text: $textFieldValue)
.padding(EdgeInsets(top: 8, leading: 16, bottom: 8, trailing: 16))
.background(Color(UIColor.secondarySystemFill))
.cornerRadius(4)
Picker(selection: $selected, label: Text(""), content: {
Text("Word").tag(0)
Text("Phrase").tag(1)
Text("Sentence").tag(2)
}).pickerStyle(SegmentedPickerStyle())
Button(action: {
self.textFieldValue = "button tapped"
}, label: {
Text("Tap to change text")
})
}.padding()
.onTapGesture(perform: UIApplication.dismissKeyboard)
// .gesture(TapGesture().onEnded { _ in UIApplication.dismissKeyboard()})
}
}
public extension UIApplication {
static func dismissKeyboard() {
let keyWindow = shared.connectedScenes
.filter({$0.activationState == .foregroundActive})
.map({$0 as? UIWindowScene})
.compactMap({$0})
.first?.windows
.filter({$0.isKeyWindow}).first
keyWindow?.endEditing(true)
}
}
正如您在代码中看到的,我尝试了两种方法来获取点击手势,但没有任何效果。
【问题讨论】:
-
从你帖子中的链接this answer 可以完美配合任何控件,你为什么选择其他方法(对我来说这绝对不可靠)?
-
感谢您的指出。在尝试了前 5-6 个答案并发布了这个问题后,我失去了希望。
-
@Asperi 它可以工作,不幸的是,你失去了内置的文本字段行为(文本选择等)......一般来说,它不存在通用解决方案,我更喜欢解决它临时性的(逐案)