繁体   English   中英

如何使用类方法作为选择器添加手势识别器?

[英]How to add gesture recognizer with class method as selector?

我正在尝试通过UIViewController扩展方法在UIImageView上添加手势识别器。

点击图像时要触发的方法是在我的swift扩展中声明的类方法:

class func openPopViewWithText(text: String!) {
    print("fire!")
}

我也从扩展类中添加选择器。 这就是我添加选择器的方式:

infoImageView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(UIViewController.openPopViewWithText(_:)) ))

这是我点击ImageView时遇到的错误:

[XXXDisplayStatsViewController openPopViewWithText:]: unrecognized selector sent to instance 0x7fd31520ada0

我扩展类中的完整代码:

public extension UIViewController {


func addInfoImageViewWithText(infoText: String){
    let margins : CGFloat = 30.0
    let infoImageView : UIImageView =  UIImageView(image: UIImage(named: "info"));
    let yOrigin : CGFloat = ((self.view.y + self.view.height) - infoImageView.height) - margins
    infoImageView.frame = CGRectMake(margins, yOrigin, infoImageView.width + 5, infoImageView.height + 5)
    self.view.insertSubview(infoImageView, atIndex: 0)
    self.view.bringSubviewToFront(infoImageView)
    infoImageView.userInteractionEnabled = true
    infoImageView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(UIViewController.openPopViewWithText(_:)) ))
}

class func openPopViewWithText(text: String!) {
    print("fire!")
}
}

问题在于openPopViewWithText函数中的第一个参数是String而不是UITapGestureRecognizer 当您单击UIImageView手势识别器将被触发,它将手势识别器实例传递给选择器,以便您可以跟踪其属性。 因此,您应该做的是将当前函数签名更改为:

class func openPopViewWithText(recognizer: UITapGestureRecognizer) {
    print("fire!")
}

除此之外,您不应该使用类函数,因为您无法访问任何UIViewController属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM