如何在触摸UITextField之外的任何地方(swift中)关闭键盘?
我正在研究一个有UIViewController的项目,在视图控制器上有一个UIScrollView和一个UITextField。 喜欢这个: 我想在键入文本框中的一些文本后点击键盘并隐藏它,然后点击文本框外的任何位置。 我试过下面的代码:
override func viewDidLoad() {
super.viewDidLoad()
self.textField.delegate = self;
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
self.view.endEditing(true)
}
当我在滚动视图外点按时,它适用于我,但是当我点击滚动视图时,什么也没有发生,键盘也不会隐藏。
在textfield外部的任何地方轻击时有什么方法可以解除键盘的使用吗? 谢谢
编辑Swift 4
编辑:添加@objc
。 虽然这不是性能的最佳选择,但这里的一个例子不应该导致太多的问题,除非有更好的解决方案。
这应该有助于你有多个UITextView
或UITextField
创建视图控制器的扩展。 这对我来说运行得更顺畅,而且比尝试使用.resignFirstResponder()
extension UIViewController
{
func hideKeyboard()
{
let tap: UITapGestureRecognizer = UITapGestureRecognizer(
target: self,
action: #selector(UIViewController.dismissKeyboard))
view.addGestureRecognizer(tap)
}
@objc func dismissKeyboard()
{
view.endEditing(true)
}
}
在viewDidLoad中调用self.hideKeyboard()
试试这个,它已经过测试和工作:
对于Swift 3.0 / 4.0
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.view.endEditing(true)
}
对于老斯威夫特
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent) {
self.view.endEditing(true)
}
在这种情况下,UITapGesture就是其中一种选择。 我试图创建示例代码以防万一。 喜欢这个,
class ViewController: UIViewController {
@IBOutlet weak var textField: UITextField!
@IBOutlet weak var scrollView: UIScrollView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let tapGesture = UITapGestureRecognizer(target: self, action: "tap:")
view.addGestureRecognizer(tapGesture)
}
func tap(gesture: UITapGestureRecognizer) {
textField.resignFirstResponder()
}
}
链接地址: http://www.djcxy.com/p/73507.html
上一篇: How to dismiss keyboard when touching anywhere outside UITextField (in swift)?