按钮单击事件(UIButton TouchUpInside操作)不起作用 - IOS / Swift

时间:2016-04-27 08:47:51

标签: ios swift uiviewcontroller uibutton uiwindow

在我的应用程序的故事板中,有一个UIViewController(child)加载到另一个UIViewController(parent)中。

这是我在父视图控制器中使用的代码,用于在父视图控制器(包括导航栏)中的所有子视图上加载子视图控制器。

let window: UIView? = UIApplication.sharedApplication().keyWindow;

let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil);
let viewController: UIViewController = storyboard.instantiateViewControllerWithIdentifier("CPBackConfirmMessageUIView");

window?.addSubview(viewController.view); 

这就是他们在我的故事板中的样子

enter image description here

这是在侧面父视图中加载子视图控制器的方式

enter image description here

在子视图控制器内部,您可以看到两个按钮。我已将(TouchUpInside)操作添加到子视图控制器类中的那些按钮,但它无法正常工作。但ViewDidLoad方法工作正常(我添加了一些动画,它们正在工作)。

有人可以告诉我如何为这些按钮编写动作并让它们工作或让我知道我在这里做错了什么。任何帮助将受到高度赞赏。

编辑: 这就是我写IBAction的方式

@IBAction func abc(sender: AnyObject) {    
    print("Worked");
}

1 个答案:

答案 0 :(得分:7)

尝试将子viewController用作属性。在当前实现中,只要方法完成,就应该释放viewController对象。当您按下按钮时,属性将确保viewController对象处于活动状态。

所以而不是:

let viewController: UIViewController = storyboard.instantiateViewControllerWithIdentifier("CPBackConfirmMessageUIView");

试试这个:

class YourParentViewController: UIViewController {

    var viewController: UIViewController!

 func someMethod() {
    let window: UIView? = UIApplication.sharedApplication().keyWindow;

    let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil);
    viewController = storyboard.instantiateViewControllerWithIdentifier("CPBackConfirmMessageUIView");

    window?.addSubview(viewController.view); 
 }

}