我有一个自定义UIControl,它有三个子视图。每个子视图,我都添加一个目标:
button.addTarget(self, action: #selector(buttonTapped(clickedBtn:)), for: .touchUpInside)
在该函数buttonTapped
中,它会做一些特殊的动画来进行一些转换(它模仿分段控件)。
现在,在ViewController中,这个自定义UIControl存在于必须知道它何时触及。我创建了一个@IBAction
函数,它与自定义UIControl的触摸事件进行交互。
问题是,这是不可能的(据我所知)。如果我向子视图添加目标触摸事件,则不会调用父触摸事件。要让父视图调用@IBAction
函数,我必须设置所有子视图的setUserInteractiveEnabled to
true`。当我这样做时,子视图的触摸事件函数将不会被调用。
我需要调用两个触摸事件函数。我怎样才能做到这一点?或者解决这个问题的最佳方法是什么?
答案 0 :(得分:2)
使用委托,在UIControl中添加协议,需要在ViewController中实现。
通过这种方式,您可以检测UIControl中是否单击了按钮并调用VC中的特定功能。
例如:
//YourUIControl.Swift
protocol YourUIControlDelegate {
func didTapFirstButton()
}
class YourUiControl : UIView { //I'm assuming you create your UIControl from UIView
var delegate : YourUIControlDelegate?
//other codes here
.
.
.
@IBAction func tapFirstButton(_ sender: AnyObject) {
if let d = self.delegate {
d.didTapFirstButton()
}
}
}
//YourViewController.Swift
extension YourViewController : UIControlDelegate {
func didTapFirstButton() {
//handle first button tap here
}
}