UIAlertController更改isModalInPopover行为

时间:2017-01-15 07:42:52

标签: ios swift

我发现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以防止此更改。

我想知道为什么会发生这种情况,是否有更好的方法来阻止警报控制器改变这种行为?

Screenshot of the storyboard

0 个答案:

没有答案