我如何在用户使用 SwiftUI 在 TextField
之外点击后关闭键盘?
我使用 SwiftUI 创建了一个 TextField
,但是如果用户在 TextField
之外单击,我找不到任何关闭键盘的解决方案。我查看了 TextField
的所有属性以及 SwiftUI TextField documentation而且我找不到与关闭键盘相关的任何内容。
这是我的 View 代码:
struct InputView: View {
@State var inputValue : String = ""
var body: some View {
VStack(spacing: 10) {
TextField("$", text: $inputValue)
.keyboardType(.decimalPad)
}
}
}
最佳答案
这可以通过 View 修饰符来完成。
代码
public extension View {
func dismissKeyboardOnTap() -> some View {
modifier(DismissKeyboardOnTap())
}
}
public struct DismissKeyboardOnTap: ViewModifier {
public func body(content: Content) -> some View {
#if os(macOS)
return content
#else
return content.gesture(tapGesture)
#endif
}
private var tapGesture: some Gesture {
TapGesture().onEnded(endEditing)
}
private func endEditing() {
UIApplication.shared.connectedScenes
.filter {$0.activationState == .foregroundActive}
.map {$0 as? UIWindowScene}
.compactMap({$0})
.first?.windows
.filter {$0.isKeyWindow}
.first?.endEditing(true)
}
}
用法
backgroundView()
.dismissKeyboardOnTap()
关于ios - TextField SwiftUI 关闭键盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60013190/