[英]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.