如何为自定义uicontrol和控制器添加触摸事件?

时间:2017-09-10 21:50:51

标签: ios swift cocoa-touch uicontrol

我有一个自定义UIControl,它有三个子视图。每个子视图,我都添加一个目标:

button.addTarget(self, action: #selector(buttonTapped(clickedBtn:)), for: .touchUpInside)

在该函数buttonTapped中,它会做一些特殊的动画来进行一些转换(它模仿分段控件)。

现在,在ViewController中,这个自定义UIControl存在于必须知道它何时触及。我创建了一个@IBAction函数,它与自定义UIControl的触摸事件进行交互。

问题是,这是不可能的(据我所知)。如果我向子视图添加目标触摸事件,则不会调用父触摸事件。要让父视图调用@IBAction函数,我必须设置所有子视图的setUserInteractiveEnabled to true`。当我这样做时,子视图的触摸事件函数将不会被调用。

我需要调用两个触摸事件函数。我怎样才能做到这一点?或者解决这个问题的最佳方法是什么?

1 个答案:

答案 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
  }
}