Swift:为 UIView 类 addGestureRecognizer [英] Swift: addGestureRecognizer for UIView class
问题描述
我使用此代码:
class StarClass: UIView {
@IBOutlet weak var bgStar: UIView!
class func createMyClassView() -> StarClass {
let myClassNib = UINib(nibName: "Star", bundle: nil)
let nW = myClassNib.instantiate(withOwner: nil, options: nil)[0] as! StarClass
nW.bgStar.layer.cornerRadius = 15
nW.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleStar(sender:))))
return nW
}
@objc func handleStar(sender: UITapGestureRecognizer) {
print("iosLog STAR")
}
}
运行后,如果我单击视图,则会出现以下错误:
After run, if I clicked on the view, I get error below:
2018-07-10 11:11:50.496349+0430 Ma[23098:89853] +[Ma.StarClasshandleStarWithSender:]: 无法识别的选择器发送到类0x10ef5cac0 2018-07-10 11:11:50.513392+0430 Ma[23098:89853] *由于未捕获的异常而终止应用程序'NSInvalidArgumentException',原因:'+[Ma.StarClasshandleStarWithSender:]: 无法识别的选择器发送到类0x10ef5cac0'* 首先抛出调用栈:...
2018-07-10 11:11:50.496349+0430 Ma[23098:89853] +[Ma.StarClass handleStarWithSender:]: unrecognized selector sent to class 0x10ef5cac0 2018-07-10 11:11:50.513392+0430 Ma[23098:89853] * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[Ma.StarClass handleStarWithSender:]: unrecognized selector sent to class 0x10ef5cac0' * First throw call stack:...
推荐答案
线路好像有问题:
nW.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleStar(sender:))))
这里,在 class
函数中,self
指的是 Class 类型,而不是它的对象.但是您要在对象上添加手势识别器.这里的解决方案是这样做:
Here, inside a class
function, self
refers to the Class type, not its object. But you are adding the gesture recogniser on an object. The solution here would be to do this:
nW.addGestureRecognizer(UITapGestureRecognizer(target: nW, action: #selector(handleStar(sender:))))
这篇关于Swift:为 UIView 类 addGestureRecognizer的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!