当你按下返回键时,有很多答案可以让键盘消失,但我希望返回键的功能仍然存在,这样用户可以创建新的行,但我还需要一种方法来关闭键盘。
我考虑过的一些事情是关闭键盘的手势识别器,但这可能不直观。这里的想法和最佳实践表示赞赏。
请在回答之前注意我已经有一个手势识别器,如果用户在UITextView外面点击以关闭任何键盘,但是这个特定的UITextView会占用整个屏幕,因此点击它并不起作用。
我目前使用的代码来自另一篇帖子,如下所示。
extension UIViewController {
func hideKeyboardWhenTappedAround() {
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(UIViewController.dismissKeyboard))
view.addGestureRecognizer(tap)
}
func dismissKeyboard() {
view.endEditing(true)
}
}
我所要做的就是在我的viewcontroller中调用此函数,我希望tap可以从任何文本控件中随意关闭键盘。它到目前为止工作得非常好,但是点击控件本身仍然会产生键盘不会消失的问题。
为占据全屏的UITextView关闭键盘的最佳方法是什么?
答案 0 :(得分:7)
我建议您在键盘上方添加“Done”按钮。有很多教程如何做到这一点,没有理由复制SO答案,只需检查:How to add a 'Done' button to numpad keyboard in iOS
可能的解决方案
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
}
}
要使用它,只需从现在开始在任何UITextView上调用addDoneButton。
答案 1 :(得分:1)
在视图控制器中添加此方法。
func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
if text == "\n" {
textView.resignFirstResponder()
return false
}
return true
}
除此之外,这应该可以解决问题 ** 在键盘外部或文本视图中轻按键盘
*/
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
if let touch = touches.anyObject() as? UITouch {
if touch.phase == UITouchPhase.Began {
textField?.resignFirstResponder()
}
}
}
答案 2 :(得分:0)
因此,基于此处的其他一些答案,我为UITextView
建立了以下子类,该子类具有与接口-生成器兼容的字段以启用多行 Return 功能,和完成功能。
希望有帮助。
Swift v5
import UIKit
@IBDesignable class MultiLineTextView: UITextView {
@IBInspectable var multiLineWithDoneButton: Bool = false
override func didMoveToWindow() {
super.didMoveToWindow()
if multiLineWithDoneButton { // Add a toolbar with a done button to the keyboard, if required
returnKeyType = UIReturnKeyType.default
let toolbar:UIToolbar = UIToolbar(frame: CGRect(x: 0, y: 0, width: Int(self.frame.size.width), height: 45))
let flexibleSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
let doneButton: UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonItem.SystemItem.done, target: self, action: #selector(doneButtonPressed))
toolbar.setItems([flexibleSpace, doneButton], animated: false)
toolbar.sizeToFit()
inputAccessoryView = toolbar
} else {
returnKeyType = UIReturnKeyType.done
}
}
@objc private func doneButtonPressed() {
endEditing(true)
}
}