首页 > 解决方案 > SwiftUI TextField 重置任何点击的焦点

问题描述

我想这样做:单击除当前“文本字段”和键盘之外的任何元素 - 调用失去焦点的逻辑。

struct ContentView: View {
    @State private var text: String = ""
    
    var body: some View {
        VStack {
            Text("Hello, world!")
            TextField(
                "Title TextField",
                text: self.$text,
                onEditingChanged: {
                    print("onEditingChanged: \($0)")
                },
                onCommit: {
                    print("onCommit")
                }
            )
            .onSubmit {
                print("onSubmit")
            }
            Button("Print") {
                print("text: \(self.text)")
            }
        }
    }
}

我想做一个通用的解决方案,而不需要手动隐藏键盘。

我需要这个,因为 TextField 在 iOS 14 和 iOS 15 中有不同的逻辑。

iOS 14:关闭键盘后值发生变化。

iOS 15:从键盘输入时值发生变化。

标签: iosswiftui

解决方案


我使用这个扩展:

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

然后在我的身体里:

        .onTapGesture {
            UIApplication.shared.endEditing()
        }

推荐阅读