从另一个文件添加点击手势识别器

时间:2017-02-06 17:14:18

标签: swift delegates uitapgesturerecognizer

目前我有2个类:ViewController和A类。我的目标是在A类的UIView中添加tap手势识别器。我的ViewController:

class ViewController {
    @IBOutlet var area: UIView!

    func enterClassA() {
        let classA = A(self.area)
        //some processing
    }
}

class A : UIGestureRecognizerDelegate {
    private var currView: UIView!

    init(newView: UIView) {
        self.currView = newView
        self.addTapGesture()
    }

    func addTapGesture() {
        let tap = UITapGestureRecognizer(target: self.currView, action:#selector(tapDetected(_:)))
        tap.delegate = self.currView as! UIGestureRecognizerdelegate? //***
        self.currView.addGestureRecognizer(tap)
    }

    @objc func tapDetected(_ tapGesture: UIGesturerecognizer) {
        print ("Tap detected!")
    }
}

但是现在它给出了错误:无法将“UIView”类型的值转换为“UIGestureRecognizerDelegate”。我尝试将第***行修改为

tap.delegate = self

但它仍然无效,显示错误:无法识别的选择器发送到实例。删除该行会产生相同的错误。我可以知道这是否可行(从另一个类添加手势识别器)?如果是的话那我应该怎么做呢?

1 个答案:

答案 0 :(得分:0)

在这一行

let tap = UITapGestureRecognizer(target: self.currView, action:#selector(tapDetected(_:)))

您说手势识别器可以搜索tapDetected()对象中的self.currView功能。尝试更改目标:

let tap = UITapGestureRecognizer(target: self, action:#selector(tapDetected(_:)))

是的,它应该是这样的:

tap.delegate = self

由于您的A课程符合UIGestureRecognizerDelegate