微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。