多个 UIAlertController 在 Swift 中一个接一个地显示

Posted

技术标签:

【中文标题】多个 UIAlertController 在 Swift 中一个接一个地显示【英文标题】:Multiple UIAlertControllers to show one after the other in Swift 【发布时间】:2015-06-10 13:30:23 【问题描述】:

我已经为我的应用设置了一个警报控制器,它的工作方式是如果部分分数高于 10,你会收到一个 UI 警报。

现在我的问题是,如果我有超过 10 个的 2 或 3 个部分,我只会显示第一个 UIalert,我希望一个接一个地看到所有这些(如果发生这种情况

这是我的代码:

func SectionAlert () 

    var message1 = NSLocalizedString("Section 1 score is now ", comment: "");
    message1 += "\(section1score)";
    message1 += NSLocalizedString(" please review before continuing", comment: "1");

    var message2 = NSLocalizedString("Section 2 score is now ", comment: "");
    message2 += "\(section2score)";
    message2 += NSLocalizedString(" please review before continuing", comment: "2");

    var message3 = NSLocalizedString("Section 3 score is now ", comment: "");
    message3 += "\(section3score)";
    message3 += NSLocalizedString(" please review before continuing", comment: "3");

    if (section1score >= 10)
        let alertController: UIAlertController = UIAlertController(title: NSLocalizedString("Section 1 score is over 10", comment: ""),
            message: " \(message1)",
            preferredStyle: .Alert)

        let OKAction = UIAlertAction(title: "OK", style: .Default) 
            action -> Void in 

        alertController.addAction(OKAction)
        self.presentViewController(alertController, animated: true, completion: nil)

     else if (section2score >= 10)
        let alertController: UIAlertController = UIAlertController(title: NSLocalizedString("Section 2 Score is over 10", comment: ""),
            message: "\(message2)",
            preferredStyle: .Alert)

        let OKAction = UIAlertAction(title: "OK", style: .Default) 
            action -> Void in 

        alertController.addAction(OKAction)
        self.presentViewController(alertController, animated: true, completion: nil)

     else if (section3score >= 10)
        let alertController: UIAlertController = UIAlertController(title: NSLocalizedString("Section 3 Score is over 10", comment: ""),
            message: "\(message3)",
            preferredStyle: .Alert)

        let OKAction = UIAlertAction(title: "OK", style: .Default) 
            action -> Void in 

        alertController.addAction(OKAction)
        self.presentViewController(alertController, animated: true, completion: nil)
    

有什么想法吗??

谢谢!

【问题讨论】:

【参考方案1】:

主要问题是您使用的是else if。除非前面的条件评估为 false,否则不会测试第二节和第三节条件。

所以你想改变这个:

if (section1score >= 10)
    // …
 else if (section2score >= 10)
    // …
 else if (section3score >= 10)
    // …

看起来更像这样:

if (section1score >= 10)
    // …


if (section2score >= 10)
    // …


if (section3score >= 10)
    // …

也就是说,您不能同时呈现三个视图控制器。您可能需要更新代码以将消息合并到一个警报中。 (这将比同时看到三个模式警报更好的用户体验。)

【讨论】:

好吧,如果需要的话,我想获得 3 个连续的警报,如果只有这种情况会发生吗?因为我试过这样并没有得到好的结果 如果您愿意,您可以这样做,但您需要适当地安排视图控制器演示的时间。您不能一次全部展示它们。 (有关更多讨论,请参阅 Consecutive UIAlertControllers;不像 UIAlertView 那样开箱即用。) 我应该把它改成 UIalertview 否,UIAlertView 在 ios 8 和 9 中已弃用。【参考方案2】:

好的,我已经想通了,我所做的是在我在视图上按 OK 时运行代码,以便它检查其他部分,然后在需要时弹出另一个部分。

我已经把它放在后面了

action -> Void in

非常感谢

【讨论】:

以上是关于多个 UIAlertController 在 Swift 中一个接一个地显示的主要内容,如果未能解决你的问题,请参考以下文章

仅在验证输入后启用 UIAlertController 的 UIAlertAction

检查UIAlertController是否已经呈现的最佳方法是什么?

从 UINavigationItem 扩展中呈现 UIAlertController

多个生成树协议--mstp

centos7 之dhcp服务为多个网段分配ip地址

调整文本以支持多个屏幕