我发现UIViewController将改变iPad上呈现的Popover视图控制器的isModalInPopover行为。
我有2个视图控制器:第一个ViewController
有一个按钮,用于显示另一个视图控制器MyViewController
,使用显示为Popover segue。在我的代码中,我将目标视图控制器的isModalInPopover
设置为true,以防止弹出窗口外部的弹出窗口被忽略:
class ViewController: UIViewController {
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
super.prepare(for: segue, sender: sender)
if segue.destination.popoverPresentationController != nil {
segue.destination.isModalInPopover = true
}
}
}
在我的第二个视图控制器上,只是一个简单的按钮,用于显示警报视图控制器:
class MyAlertViewController: UIViewController {
@IBAction func buttonTapped(_ sender: Any) {
let alert = UIAlertController(title: nil, message: "Just an alert.", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: .cancel, handler: { _ in
(sender as? UIButton)?.setTitle("\(self.isModalInPopover)", for: .normal)
// self.isModalInPopover = true // comment out to restore the behaviour
}))
present(alert, animated: true, completion: nil)
}
}
一旦警报控制器被解雇,MyAlertViewController的isModalInPopover行为也已被更改 - 现在我可以点击popover视图外部来解除它,甚至是isModalInPopover的值仍然是true
。我必须再次手动将值设置为true
以防止此更改。
我想知道为什么会发生这种情况,是否有更好的方法来阻止警报控制器改变这种行为?