【问题标题】:Unrecognized selector with UITapGestureRecognizer使用 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()
}

我在这里附上截图

第一张截图

第二张截图

第三张截图

【问题讨论】:

  • 请显示足够的代码来检查您做错了什么。错误消息是说UITapGestureRecognizertargetUIView,它没有方法dismissKeyboard:
  • 复制/粘贴代码和错误,而不是截图。错误是明确的,对此有很多问题。您在哪里创建了 tapGesture?
  • @OOPer 我会这样做
  • UITapGestureRecognizer(target: self.view, => UITapGestureRecognizer(target: self, 因为是 self 正在实现和执行方法 func dismissKeyboard()
  • @OOPer 问题是我在 ViewController 中创建了方法 dismissKeyboard

标签: xcode swift4 selector uitapgesturerecognizer unrecognized-selector


【解决方案1】:

Gesture 的目标是 (self) 而不是 self.view,因为你正在调用所有的 viewcontroller 而不仅仅是他内部的视图,

let viewTapRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.dismissKeyboard))
view.addGestureRecognizer(viewTapRecognizer)

如果你想减少 hideKeyboard 功能,只需使用

view.endEditing(true)

【讨论】:

  • 非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-21
  • 2013-10-09
  • 1970-01-01
  • 1970-01-01
  • 2018-01-22
  • 1970-01-01
相关资源
最近更新 更多