Swift - 无法识别的选择器到实例 - UITapGestureRecognizer

问题描述

我正在尝试设置 UITapGestureRecognizer,但一直出现以下错误

[projet.View tapA]:] 无法识别的选择器发送到实例地址

这是我的代码

类视图:

class View: UIView {

     init(frame: CGRect,s: TimeInterval,position : CGPoint,size : CGSize) {

        let tap = UITapGestureRecognizer(target: self,action:   
        #selector(ViewController.tapA(sender:)))
        tap.numberOfTapsrequired = 1
        self.addGestureRecognizer(tap)
     }
}    

类视图控制器(UIViewController):

@objc func tapA (sender : UITapGestureRecognizer){
        //For Now : 
        print("Jump")
   }

我一直找不到这样的问题。 任何帮助将非常感激! 提前致谢。

解决方法

不是在 ViewController 类中创建选择器,而是在 View 类中创建它 并将视图控制器的实例传递给它,然后在选择器中执行代码 ViewController

查看

class View: UIView {

     var viewController: ViewController!

     init(frame: CGRect,s: TimeInterval,position : CGPoint,size : CGSize) {
        let tap = UITapGestureRecognizer(target: self,action: #selector(tapA(_:)))
        tap.numberOfTapsRequired = 1
        self.addGestureRecognizer(tap)
     }

     @objc 
     private func tapA(_ sender: UITapGestureRecognizer) {
        guard let vc = viewController as? ViewController else { return }
        vc.execTapA()
     }
}    

视图控制器

func execTapA() {
    // Execute the code you need
}

要将 ViewController 的引用传递给视图,只需在您的 ViewControllerviewDidLoad 方法中调用:

view.viewController = self