如何为自定义 uicontrol 和 controller 添加触摸事件?

How to add touch event for custom uicontrol and controller?

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

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

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

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

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

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

使用委托,在你的 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
  }
}