在IBDesignable中向父控制器转发操作UIButton

时间:2017-01-17 13:51:25

标签: ios objective-c swift uibutton

让我们假设,我有一个如下所示的视图层次结构:

-- > UIViewController (myViewController)
---- > UIView (IBDesignable - myCustomView)
------- > UIButton (myButton)

是否有可能告诉myViewController用户互动已触发myButton,例如.touchUpInside,“没有使用SwiftObjective C

代表模式

请注意myCustomView是IBDesignable。

3 个答案:

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

enter image description here

答案 2 :(得分:0)

您可以在myButton上创建myCustomView公共财产,并在myViewController中使用您可以调用此方法的代码

[myCustomView.myButton addTarget:self action:@selector(myButtonPressed:) forControlEvents:UIControlEventTouchUpInside];

请勿忘记实施myButtonPressed方法,如:

- (void)myButtonPressed:(UIButton*)aButton
{
    //Do something....
}