在保持返回功能的同时使键盘远离UITextView

Jos*_*han 3 keyboard uitextview ios swift swift3

当你按下返回键时,如何让键盘消失有很多答案,但我希望返回键的功能仍然存在,这样用户可以创建新行,但我还需要一种方法来关闭键盘.

我考虑过的一些事情是关闭键盘的手势识别器,但这可能不直观.这里的想法和最佳实践表示赞赏.

请在回答之前注意我已经有一个手势识别器,如果用户在UITextView外面点击以关闭任何键盘,但这个特定的UITextView会占用整个屏幕,因此点击它不起作用.

我目前使用的代码是从另一篇文章中获取的,如下所示.

extension UIViewController {
    func hideKeyboardWhenTappedAround() {
        let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(UIViewController.dismissKeyboard))
        view.addGestureRecognizer(tap)
    }

    func dismissKeyboard() {
        view.endEditing(true)
    }
}
Run Code Online (Sandbox Code Playgroud)

我所要做的就是在我的viewcontroller中调用这个函数,我希望tap可以从任何文本控件中为我关闭键盘.到目前为止,它一直运行良好,但点击控件本身仍然会产生键盘不会消失的问题.

关闭占据全屏的UITextView键盘的最佳方法是什么?

Tim*_*ich 7

我建议您在键盘上方添加"Done"按钮.有很多教程如何做到这一点,没有理由复制SO答案,只需检查:如何在iOS中为numpad键盘添加"完成"按钮

可能的解决方案

extension UITextView {

    func addDoneButton() {
        let keyboardToolbar = UIToolbar()
        keyboardToolbar.sizeToFit()
        let flexBarButton = UIBarButtonItem(barButtonSystemItem: .flexibleSpace,
                                            target: nil, action: nil)
        let doneBarButton = UIBarButtonItem(barButtonSystemItem: .done,
                                            target: self, action: #selector(UIView.endEditing(_:)))
        keyboardToolbar.items = [flexBarButton, doneBarButton]
        self.inputAccessoryView = keyboardToolbar
    }
}
Run Code Online (Sandbox Code Playgroud)

要使用它,从现在开始只需在任何UITextView上调用addDoneButton.