Swift:为 UIView 类 addGestureRecognizer [英] Swift: addGestureRecognizer for UIView class

查看:42
本文介绍了Swift:为 UIView 类 addGestureRecognizer的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用此代码:

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆