我正在尝试创建一个警报控制器,里面有自定义视图。自定义视图从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。
答案 0 :(得分:0)
您应该捕获valueChanged
控制事件,但是如果您想通过点击以编程方式进行值更改,我想您可以这样做:
class CustomView: UIView {
@IBAction func switchClicked(_ sender: UISwitch) {
sender.setOn(!sender.isOn, animated: true)
}
}
答案 1 :(得分:0)
我认为只有在内存中加载了相同的类时,xib视图才会进行triger方法。在您的情况下,这可能是一个问题。要测试这个,你可以在你正在显示警告的同一个类中添加自定义视图。