使用 UITapGestureRecognizer 无法识别的选择器
Posted
技术标签:
【中文标题】使用 UITapGestureRecognizer 无法识别的选择器【英文标题】:Unrecognized selector with UITapGestureRecognizer 【发布时间】:2018-08-09 13:10:39 【问题描述】:我正在尝试在我的应用中添加当用户从文本字段中点击其他位置时关闭键盘的可能性。我正在使用 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()
我在这里附上截图
第一张截图
第二张截图
第三张截图
【问题讨论】:
请显示足够的代码来检查您做错了什么。错误消息是说UITapGestureRecognizer
的target
是UIView
,它没有方法dismissKeyboard:
。
复制/粘贴代码和错误,而不是截图。错误是明确的,对此有很多问题。您在哪里创建了 tapGesture?
@OOPer 我会这样做
UITapGestureRecognizer(target: self.view,
=> UITapGestureRecognizer(target: self,
因为是 self
正在实现和执行方法 func dismissKeyboard()
。
@OOPer 问题是我在 ViewController 中创建了方法 dismissKeyboard
【参考方案1】:
Gesture 的目标是 (self) 而不是 self.view,因为你正在调用所有的 viewcontroller 而不仅仅是他内部的视图,
let viewTapRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.dismissKeyboard))
view.addGestureRecognizer(viewTapRecognizer)
如果你想减少 hideKeyboard 功能,只需使用
view.endEditing(true)
【讨论】:
非常感谢以上是关于使用 UITapGestureRecognizer 无法识别的选择器的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 中使用 UITapGestureRecognizer 中的参数
使用 UITapGestureRecognizer 时不会调用 textFieldShouldEndEditing