📜  如何关闭键盘 swiftui - Swift (1)

📅  最后修改于: 2023-12-03 14:52:07.551000             🧑  作者: Mango

如何关闭键盘 SwiftUI - Swift

在 SwiftUI 中关闭键盘可以通过以下几种方式实现:

1. 调用 resignFirstResponder()

可以调用 .resignFirstResponder() 来关闭当前 Text Field 的键盘。在需要关闭键盘的地方添加以下代码:

UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to:nil, from:nil, for:nil)

注意:该方法会关闭所有处于编辑状态的 Text Field,因此需要在需要关闭所有键盘的情况下使用。

2. 实现 UITextFieldDelegate

在 SwiftUI 中可以使用 UITextField 并实现 UITextFieldDelegate,从而在完成输入后关闭键盘。例如:

struct ContentView: View {
    @State private var text: String = ""
    var body: some View {
        TextField("请输入...", text: $text)
            .textFieldStyle(RoundedBorderTextFieldStyle())
            .padding()
            .keyboardType(.default)
            .returnKeyType(.done)
            .onSubmit {
                hideKeyboard()
            }
    }

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

extension View {
    func onSubmit(perform action: @escaping () -> Void) -> some View {
        return self.background(
            KeyboardObserver(action: action)
        )
    }
}

struct KeyboardObserver: UIViewRepresentable {
    let action: () -> Void

    func makeUIView(context: UIViewRepresentableContext<KeyboardObserver>) -> UIView {
        let view = UIView(frame: .zero)
        let tapGesture = UITapGestureRecognizer(target: view, action: #selector(UIView.endEditing))
        view.addGestureRecognizer(tapGesture)
        return view
    }

    func updateUIView(_ uiView: UIView, context: UIViewRepresentableContext<KeyboardObserver>) {

    }

    func makeCoordinator() -> Coordinator {
        Coordinator(action: action)
    }

    class Coordinator {
        let action: () -> Void

        init(action: @escaping () -> Void) {
            self.action = action
        }

        @objc func keyboardWillHide(notification: Notification) {
            action()
        }
    }
}

3. 使用第三方库 IQKeyboardManagerSwift

IQKeyboardManagerSwift 是一个很好的开源库,提供了很多有用的功能,比如控制键盘出现隐藏的动画、处理键盘遮挡输入框等等。

首先安装 IQKeyboardManagerSwift,可以通过 CocoaPods 或手动安装,具体请参考 官方文档

然后在 AppDelegate.swift 中启动 IQKeyboardManagerSwift:

import IQKeyboardManagerSwift

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        IQKeyboardManager.shared.enable = true
        IQKeyboardManager.shared.enableAutoToolbar = false
        return true
    }
}

启用后就不需要做任何其他配置了,库会自动处理键盘事件。

以上三种方法都可以成功关闭键盘,选择适合自己的方法即可。