ios - TextField SwiftUI 关闭键盘

标签 ios swift keyboard swiftui textfield

我如何在用户使用 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()

在此处查看演示:https://github.com/youjinp/SwiftUIKit

关于ios - TextField SwiftUI 关闭键盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60013190/

相关文章:

ios - 通过电子邮件 ios 发送对象和应用程序链接

windows - "Pause/Break" key 的扫描码是什么?

ubuntu - 使用组合键打字?

objective-c - 如何检测 objective-c 中的外部键盘连接?

ios - 在 Swift 中使用 for 循环动态创建 UIButton

swift - 使用swift 3查找现在和特定时间之间的时间

ios - 从 Storyboard返回到 XIB

ios - 在 tableview rx 数据源中拉动刷新

java - APNs 推送通知发送的 Iphone 表情符号 Unicode 解码问题

ios - loadNibNamed() 失败 : Unknown class <mangled Swift identifier> in Interface Builder file