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

Posted

技术标签:

【中文标题】Swift - 无法识别的选择器到实例 - UITapGestureRecognizer【英文标题】:Swift - Unrecognized Selector to instance - UITapGestureRecognizer 【发布时间】:2021-01-25 15:52:40 【问题描述】:

我正在尝试设置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 中,所以它是实现该方法的ViewController 的一个实例。但是你做了UITapGestureRecognizer(target: self,所以目标是self,视图的实例itself。由于它不知道该方法,因此它会因该错误消息而崩溃。 你不能使用直接选择器。检查这个:***.com/a/65736298/14733292 【参考方案1】:

不要在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

【讨论】:

以上是关于Swift - 无法识别的选择器到实例 - UITapGestureRecognizer的主要内容,如果未能解决你的问题,请参考以下文章

Swift:手势识别器无法识别的选择器发送到实例

Swift 3 NSCoder 无法识别的选择器发送到实例

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

Swift无法识别的选择器发送到实例

Swift - 无法识别的选择器发送到 SDWebImage 方法上的实例

NSNotification 无法识别的选择器发送到 Swift 中的实例