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

时间:2015-06-10 13:30:24

标签: ios swift uialertcontroller

我为我的应用设置了一个alertcontroller,它的工作方式是如果部分得分高于10,你会得到一个ui警报。

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

这是我的代码:

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)
    }
}

任何想法??

谢谢!

2 个答案:

答案 0 :(得分:1)

主要问题是您使用else if。第2节和第3节条件将不会被测试,除非之前的条件评估为false

所以你想改变这个:

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

看起来更像是这样:

if (section1score >= 10){
    // …
}

if (section2score >= 10){
    // …
}

if (section3score >= 10){
    // …
}

也就是说,您将无法同时呈现三个视图控制器。您可能希望更新代码以将消息合并为一个警报。 (这比用户同时出现三个模态警报更好。)

答案 1 :(得分:0)

好的,我已经弄清楚了,我已经完成的是当我在视图上按OK时运行代码,以便检查其他部分然后在需要时弹出另一部分。

我把它推到了

之后
action -> Void in

非常感谢