我一直在到处找这个,但我似乎找不到。我知道如何解雇使用Objective-C键盘,但我不知道如何使用Swift?有人知道吗?


当前回答

我得到了你

override func viewDidLoad() {
    super.viewDidLoad() /*This ensures that our view loaded*/
    self.textField.delegate = self /*we select our text field that we want*/   
    self.view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: Selector("dismissKeyboard")))
}

func dismissKeyboard(){ /*this is a void function*/
    textField.resignFirstResponder() /*This will dismiss our keyboard on tap*/
}

其他回答

对于Swift3

在viewDidLoad中注册一个事件识别器

let tap = UITapGestureRecognizer(target: self, action: #selector(hideKeyBoard))

然后我们需要在相同的viewDidLoad中添加手势到视图中。

self.view.addGestureRecognizer(tap)

然后我们需要初始化注册的方法

func hideKeyBoard(sender: UITapGestureRecognizer? = nil){
    view.endEditing(true)
}

在Swift 4中,添加@objc:

在viewDidLoad中:

let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.dismissKeyboard))
view.addGestureRecognizer(tap)

功能:

@objc func dismissKeyboard() {
  view.endEditing(true)
}

为了扩展Esqarrouth的答案,我总是使用以下方法来解除键盘,特别是如果我正在解除键盘的类没有view属性和/或不是UIView的子类。

UIApplication.shared.keyWindow?.endEditing(true)

并且,为了方便起见,下面是uiapplication类的扩展:

extension UIApplication {

    /// Dismisses the keyboard from the key window of the
    /// shared application instance.
    ///
    /// - Parameters:
    ///     - force: specify `true` to force first responder to resign.
    open class func endEditing(_ force: Bool = false) {
        shared.endEditing(force)
    }

    /// Dismisses the keyboard from the key window of this 
    /// application instance.
    ///
    /// - Parameters:
    ///     - force: specify `true` to force first responder to resign.
    open func endEditing(_ force: Bool = false) {
        keyWindow?.endEditing(force)
    }

}

斯威夫特3

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    self.view.endEditing(true)
}

另一种可能是在你可能需要触摸的所有视图下面添加一个没有内容的大按钮。 给它一个名为:

@IBAction func dismissKeyboardButton(sender: AnyObject) {
    view.endEditing(true)
}

对我来说,手势识别器的问题是,它也捕捉了我想通过tableViewCells接收的所有触摸。