如何为自定义 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
函数,我必须设置所有子视图的 setUserInteractiveEnabledto
true`。当我这样做时,子视图的触摸事件函数将不会被调用。
我需要调用两个触摸事件函数。我怎样才能做到这一点?或者解决这个问题的最佳方法是什么?
使用委托,在你的 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
}
}
我有一个具有三个子视图的自定义 UIControl。每个子视图,我添加一个目标:
button.addTarget(self, action: #selector(buttonTapped(clickedBtn:)), for: .touchUpInside)
在那个函数 buttonTapped
中,它会做一些特殊的动画来做一些转换(它模仿分段控件)。
现在,在这个自定义 UIControl 所在的 ViewController 中必须知道它何时被触摸。我创建了一个 @IBAction
函数来与自定义 UIControl 的触摸事件交互。
问题是,这是不可能的(据我所知)。如果我将目标触摸事件添加到子视图,则不会调用父触摸事件。要让父视图调用 @IBAction
函数,我必须设置所有子视图的 setUserInteractiveEnabledto
true`。当我这样做时,子视图的触摸事件函数将不会被调用。
我需要调用两个触摸事件函数。我怎样才能做到这一点?或者解决这个问题的最佳方法是什么?
使用委托,在你的 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
}
}