SwiftUI 如何关闭 TextField 的键盘?

5 min read

可以使用 .resignFirstResponder() 来关闭 TextField 的键盘,例如:

struct ContentView: View {
    @State private var text: String = ""
    @State private var isEditing: Bool = false
    
    var body: some View {
        VStack {
            TextField("Enter text", text: $text, onEditingChanged: { (editing) in
                self.isEditing = editing
            })
            .textFieldStyle(RoundedBorderTextFieldStyle())
            .padding()
            
            Button("Done") {
                self.isEditing = false
                UIApplication.shared.endEditing()
            }
            .padding()
        }
    }
}

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

其中,按钮的点击事件调用了自定义的 endEditing 函数来关闭键盘。注意要在 App 扩展中将该函数声明为可访问的。