TextField SwiftUI 关闭键盘

Juj*_*uba 2 keyboard textfield ios swift swiftui

用户在TextField使用 SwiftUI之外单击后如何关闭键盘?

TextField使用 SwiftUI创建了一个,但是如果用户在TextField. 我查看TextFieldSwiftUI TextField 文档的所有属性,但找不到与关闭键盘相关的任何内容。

这是我的视图代码:

struct InputView: View {
    @State var inputValue : String = ""
    var body: some View {

        VStack(spacing: 10) {
            TextField("$", text: $inputValue)
                .keyboardType(.decimalPad)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

you*_*jin 5

这可以通过视图修饰符来完成。

代码

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)
    }
}
Run Code Online (Sandbox Code Playgroud)

用法

backgroundView()
   .dismissKeyboardOnTap()
Run Code Online (Sandbox Code Playgroud)

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

  • 这有一个不良的副作用,如果您将导航视图的后退按钮准确放置在导航视图上,则导航视图的后退按钮将停止工作,但可以通过将其添加到导航视图的子级上来修复 (2认同)