我有自定义视图,应该点击并执行一些操作。 我在同一个屏幕上有两个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()
}
}
答案 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
的触摸行为,例如使用闭包。最快的(但非常难看)方式 - 为这些视图设置不同的标记,并为不同的标记编写不同的行为。