使用alertController内部按钮的自定义uiview在iOS中不起作用

时间:2017-05-14 00:30:03

标签: ios swift uiview uialertcontroller uiswitch

我正在尝试创建一个警报控制器,里面有自定义视图。自定义视图从xib文件加载。自定义视图包含一个uiswitch。问题是它的点击事件没有被触发,并且点击时没有打开/关闭UI开关。这是我正在尝试的代码:

这是我的视图控制器的按钮点击事件,用于显示警告:

@IBAction func btnClicked(_ sender: UIButton) {
        let alertController = UIAlertController(title: "\n\n\n\n\n\n", message: "", preferredStyle: UIAlertControllerStyle.alert)
        let customView=Bundle.main.loadNibNamed("CustomView", owner: self, options: nil)!.first! as! CustomView
        let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: {(alert: UIAlertAction!) in print("cancel")})
        alertController.addAction(cancelAction)
        let somethingAction = UIAlertAction(title: "Something", style: .default, handler: {(alert: UIAlertAction!) in print("something")})
        alertController.addAction(somethingAction)

        alertController.view.addSubview(customView)
        self.present(alertController, animated: true, completion:{})
    }

这是CustomView类中的代码:

class CustomView: UIView {
    @IBAction func switchClicked(_ sender: UISwitch) {
        print("switch cliked")
    }
}

我的CustomView.xib文件正确设置了引用布局。它只有一个uiswitch。 CustomView.xib的大小设置为“自由形式”(不确定是否重要)。在搜索类似问题但没有任何作用之后,我还尝试将 isUserInteractionEnabled 设置为false或true,以用于CustomView和/或alertController.view。

2 个答案:

答案 0 :(得分:0)

您应该捕获valueChanged控制事件,但是如果您想通过点击以编程方式进行值更改,我想您可以这样做:

class CustomView: UIView {
    @IBAction func switchClicked(_ sender: UISwitch) {
        sender.setOn(!sender.isOn, animated: true)
    }
 }

答案 1 :(得分:0)

我认为只有在内存中加载了相同的类时,xib视图才会进行triger方法。在您的情况下,这可能是一个问题。要测试这个,你可以在你正在显示警告的同一个类中添加自定义视图。