检测触摸了哪个uiview

时间:2017-01-25 21:35:48

标签: ios swift uiview

我有自定义视图,应该点击并执行一些操作。 我在同一个屏幕上有两个CustomView。我想检测点击哪一个做不同的动作。

是否可以在那里设置一些ID来检测哪一个被完全点击?

这是我的CustomView

protocol CostomViewDelegate: class {
    func viewClicked()
}

class CostomView: UIView, UIGestureRecognizer {

    @IBOutlet  weak var placeholderlbl: UILabel!
    @IBOutlet  weak var textLbl: UILabel!
    weak var delegate: CostomViewDelegate?

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        self.layer.backgroundColor = UIColor.red.cgColor
    }

    override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {

    }

    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
        self.layer.backgroundColor = UIColor.white.cgColor
        delegate?.viewClicked()
    }
}

2 个答案:

答案 0 :(得分:1)

如果要使用委托,则应更改委托功能,以便视图为委托提供对自身的引用。

"type": "keyword"

然后在您的委托函数中,您可以比较传递的引用或其他属性的值,以便采取适当的操作:

protocol CostomViewDelegate: class {
    func costomView(clicked: CostomView)
}

class CostomView: UIView, UIGestureRecognizer {

    @IBOutlet  weak var placeholderlbl: UILabel!
    @IBOutlet  weak var textLbl: UILabel!
    weak var delegate: CostomViewDelegate?

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        self.layer.backgroundColor = UIColor.red.cgColor
    }

    override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {

    }

    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
        self.layer.backgroundColor = UIColor.white.cgColor
        delegate?.costomView(clicked: self)
    }

}

您还可以向func costomView(clicked: CostomView) { if clicked == self.costomView1 { // Do something } else if clicked == self.costomView2 { // Do something else } } 类添加一个属性,该类包含一个闭包,并在点击视图时调用该闭包。这也许是一个更现代化的现代化的#34;方法,但授权仍然有效,你如何做是一个意见问题。就个人而言,我看到代理的一个优点是,在查看代码时,您可以在类中快速找到委托函数,而闭包可能不太明显。

答案 1 :(得分:0)

最好的方法 - 从父类或视图控制器定义Set twoRange = Range("A2", Range("A2").End(xlDown)) twoRange.Select twoRange.Copy 的触摸行为,例如使用闭包。最快的(但非常难看)方式 - 为这些视图设置不同的标记,并为不同的标记编写不同的行为。