我有一个继承自UIView的自定义类。在本课程中,我为其添加了一个手势识别器
//CustomParentView.swift
class CustomParentView: UIView, UIGestureRecognizerDelegate {
override init(frame: CGRect) {
super.init(frame: frame)
setupGestureRecognizer()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
func setupGestureRecognizer() {
let tap = UITapGestureRecognizer(target: self, action: #selector(CustomParentView.viewTapped(sender:)))
tap.delegate = self
self.addGestureRecognizer(tap)
}
func viewTapped(sender: UITapGestureRecognizer) {
print("View tapped")
}
}
然后我有另一个继承自CustomParentView的类,我最终会有一些继承自它的UIViews,但是手势识别器的委托没有被设置为CustomParentView,它被设置为继承它的视图。这意味着我需要将viewTapped
函数移动到每个CustomParentView的子类中,并在每个类中重复此函数。
所以我的问题是如何将手势识别器的委托设置为CustomParentView并使其保持CustomParentView
答案 0 :(得分:0)
然后我有另一个继承自CustomParentView的类,我 最终会有一些从它继承的UIViews,但是 手势识别器的委托未设置为CustomParentView, 它被设置为继承它的视图。
您指定为手势识别器委托的哪个类无关紧要,只需实现UIGestureRecognizerDelegate
协议即可。 CustomParentView
的任何子类都将实现此协议,因为基类具有此功能。
这意味着我需要将viewTapped函数移动到每个CustomParentView的子类中,并在每个类中重复此函数。
不,不。这不是面向对象编程和继承的工作方式。 CustomParentView
的所有子类都将使用viewTapped
方法。
所以我的问题是如何设置手势识别器的委托 成为CustomParentView并保持CustomParentView
你有什么作品。你试过吗?
您还应该从另一个setupGestureRecognizer
致电init
,以便它适用于在故事板中创建的视图:
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setupGestureRecognizer()
}