我正在尝试在我的应用程序中添加当用户在文本字段之外点击其他位置时关闭键盘的可能性。我正在使用UITapGestureRecognizer实现此功能。我使用创建一个新的UITapGestureRecognizer对象
UITapGestureRecognizer(target: Any?, action: Selector?)
无法识别的选择器
并将action参数设置为一个函数,该函数可退出此视图中我正在使用的两个文本字段的第一响应者。我将所有设置正确地添加为关键字@objc
,然后再使用#selector(dismissKeyboard)
形式进行操作,但是当我运行应用程序并点击触发函数的视图时,应用程序崩溃并且控制台打印错误
“由于未捕获的异常而终止应用程序 'NSInvalidArgumentException',原因:'-[UIView dismissKeyboard:]: 无法识别的选择器已发送到实例0x7ff93790f6b0' ***首先抛出调用堆栈:“
override func viewDidLoad() {
super.viewDidLoad()
// Set rounded corners
textFieldView.layer.cornerRadius = 6
logInButton.layer.cornerRadius = 6
//HERE'S THE ISSUE
let viewTapRecognizer = UITapGestureRecognizer(target: self.view, action: #selector(dismissKeyboard))
self.view.addGestureRecognizer(viewTapRecognizer)
auth = Auth.auth()
}
@objc func dismissKeyboard() {
emailTextField.resignFirstResponder()
passwordTextField.resignFirstResponder()
}
我在此处附上屏幕截图
第一个屏幕截图
第二个屏幕截图
第三张屏幕截图
答案 0 :(得分:0)
手势的目标是(self)不是self.view,因为您要调用所有的viewcontroller而不只是他内部的视图
let viewTapRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.dismissKeyboard))
view.addGestureRecognizer(viewTapRecognizer)
如果要减少hideKeyboard函数,请使用
view.endEditing(true)