让我们假设,我有一个如下所示的视图层次结构:
-- > UIViewController (myViewController)
---- > UIView (IBDesignable - myCustomView)
------- > UIButton (myButton)
是否有可能告诉myViewController
用户互动已触发myButton
,例如.touchUpInside
,“没有”使用Swift
或Objective C
?
请注意myCustomView
是IBDesignable。
答案 0 :(得分:3)
您可以使用通知。
将此代码添加到按下按钮的位置
NotificationCenter.default.post(name: Notification.Name(rawValue: "ButtonTapped"), object: nil)
myViewController
中的这个:
NotificationCenter.default.addObserver(self, selector: #selector(methodToBeCalled), name: NSNotification.Name(rawValue: "ButtonTapped"), object: nil)
更改" ButtonTapped"最适合你需要的东西,methodToBeCalled
是应该执行的方法的名称。
答案 1 :(得分:2)
例如,使用UIButton
在viewController上声明IBOutlet
变量。
@IBOutlet weak var button: UIButton!
你可以只做目标 - 行动模式。只需在viewController中添加它。
button.addTarget(self, action: #selector(handleButtonTouch(_:)), for: .touchUpInside)
并在viewController上声明你的函数
func handleButtonTouch(_ button: UIButton) {
print("button has been pressed")
}
修改强>
您也可以直接从Interface Builder声明IBAction
函数。
点击您的UIButton
实例,按住键盘上的CTRL
键,然后将其拖至UIViewController
子类。
可设置的属性:
Connection: Action Name: function name, something like `handleButtonTouch` Type: UIButton Event: the event you would like the function to be fired, in your case it is `Touch Up Inside`
答案 2 :(得分:0)
您可以在myButton
上创建myCustomView
公共财产,并在myViewController
中使用您可以调用此方法的代码
[myCustomView.myButton addTarget:self action:@selector(myButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
请勿忘记实施myButtonPressed
方法,如:
- (void)myButtonPressed:(UIButton*)aButton
{
//Do something....
}