gpt4 book ai didi

ios - SwiftUI - 在 View 中的任意位置点击时关闭键盘 - 其他交互元素的问题

转载 作者:行者123 更新时间:2023-12-01 15:42:51 27 4
gpt4 key购买 nike

我有一个 TextField和一些可操作的元素,如 Button , Picker在一个 View 里面。当使用在 TextField 之外敲击时,我想关闭键盘.使用 this question 中的答案,我实现了。但是,问题来自其他可操作的项目。

当我点击 Button , Action 发生但键盘没有关闭。与 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)
}
}


正如您在代码中看到的那样,我尝试了这两种选项来获得点击手势,但没有任何效果。

最佳答案

您可以像这样在 View 上创建扩展

extension View {
func endTextEditing() {
UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder),
to: nil, from: nil, for: nil)
}
}

并将其用于要关闭键盘的 View 。
.onTapGesture {

self.endTextEditing()
}

我刚刚在最近的 raywenderlich 教程中看到了这个解决方案,所以我认为它是目前最好的解决方案。

关于ios - SwiftUI - 在 View 中的任意位置点击时关闭键盘 - 其他交互元素的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60348988/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com