UIAlertController口吃

时间:2017-08-23 15:41:33

标签: ios swift ipad uialertcontroller

在我为我的公司开发的内部应用程序(用Swift编写的iPad应用程序)中的一个非常负载的ViewController中,我在几种情况下呈现警报风格的UIAlertControllers。第一次显示警报时,它始终显示非常流畅。然而,任何随后的警报显示都会变得非常恶劣,即使对于没有很多代码围绕其演示和解雇的警报也是如此。

例如,如果用户在进行更改后尝试关闭vc而不保存(简单的条件为"如果bool_Saved == false {创建并显示警告}")会显示一条警告,询问他们是否& #39;确保他们想要退出而不保存。如果他们选择是,则vc被解雇,否则,警报将被解除。警报动画的第一次创建和呈现顺利进行,但无论何时此条件或任何其他代码需要提供警报,演示文稿都会在动画中断断续续。

这个vc上的用户界面很漂亮。整个屏幕是一个带有contentView的scrollView,其中包含10个子UIViews,每个子UIViews有3个UITextFields,~9个UILabels和~8个UIButtons(该公司想要一个他们一直在使用的纸质表格的精确数字复制品) 。关闭vc并重新加载它会导致下一个警报再次平滑显示,但是后续警报再次通过其当前动画停止。

我已经开始在乐器中进行分析,但我对它有点缺乏经验并且打算今天使用大部分工具来熟悉各种工具,希望能找到这个问题的来源。我想知道的是,是否有人对可能导致这种口吃问题的原因有任何建议。

谢谢,如果我能提供任何其他信息,请告诉我。

使用上述代码段进行编辑:

func cancelTapped() {
    if savedOnce == false {
        let alert_Exit = UIAlertController(title: "Exit Inspection?", message: "Unsaved changes to the sheet will be lost upon exit.  Are you sure you want to exit without saving?", preferredStyle: .alert)
        let action_No = UIAlertAction(title: "No", style: .cancel, handler: nil )
        let action_Yes = UIAlertAction(title: "Yes", style: .default, handler: { [unowned self]
            (action) in
            self.exitSheet()
        })
        alert_Exit.addAction(action_No)
        alert_Exit.addAction(action_Yes)

        present(alert_Exit, animated: true, completion: nil)
    } else {
        exitSheet()
    }
}

1 个答案:

答案 0 :(得分:0)

您没有解雇警报。在“是”按钮中插入该行。

let action_Yes = UIAlertAction(title: "Yes", style: .default, handler: { [unowned self]
        (action) in
        alert_Exit.dismiss(animated: true)
        self.exitSheet()
    })

当您第二次创建警报时,它可能会导致与您视图中某处未被解雇的隐藏的先前警报冲突。如何加载VC,它可能没有任何区别。

样式.cancel无论如何都会自行删除,而.default则会要求您删除警报。