微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

swift – 遍历多个UIAlertController

在某些情况下,我的应用程序需要显示多个警报消息.在开始时收集错误消息,并且需要一次一个地向用户显示.当第一个被确认时,应该呈现下一个.问题是,他们都试图同时执行,显然.有同步的智能方法吗?这里有一些代码简单描述了我想要做的事情:

var errors : [NSError]!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view,typically from a nib.

    let error1 = NSError(domain: "Test1",code: 1,userInfo: [NSLocalizedFailurereasonerrorKey : "Test1 reason."])

    let error2 = NSError(domain: "Test2",code: 2,userInfo: [NSLocalizedFailurereasonerrorKey : "Test2 reason."])

    let error3 = NSError(domain: "Test3",userInfo: [NSLocalizedFailurereasonerrorKey : "Test3 reason."])

    errors = [error1,error2,error3]

}

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)

    for error in errors {

        self.showAlert(error)

    }

}

func showAlert(error: NSError) {

    var alert = UIAlertController(title: error.domain,message: error.localizedDescription,preferredStyle: .Alert)
    alert.addAction(UIAlertAction(title: "OK",style: .Default,handler:nil))

    self.presentViewController(alert,animated: true,completion: nil)
}

解决方法

你快到了.拥有警报消息的缓冲区是正确的想法.但是,不应立即显示所有警报,而应将showAlert()调用移动到UIAlertAction的处理程序.因此,如果一个警报被解除,则会显示一个警报.

像这样的东西:

var errors : [NSError]!

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)

    let error1 = NSError(domain: "Test1",userInfo: [NSLocalizedFailurereasonerrorKey : "Test1 reason."])
    let error2 = NSError(domain: "Test2",userInfo: [NSLocalizedFailurereasonerrorKey : "Test2 reason."])
    let error3 = NSError(domain: "Test3",error3]

    showError() // show an alert if errors are queued
}

func showError() {
    if let error = errors.first {
        let alert = UIAlertController(title: error.domain,preferredStyle: .Alert)
        let okayAction = UIAlertAction(title: "OK",style: .Default) { action in
            self.errors.removeAtIndex(0) // remove the message of the alert we have just dismissed

            self.showError() // show next alert if there are more errors queued
        }
        alert.addAction(okayAction)
        presentViewController(alert,completion: nil)
    }
    else {
        println("All alerts shown")
    }
}

建议:解除多个警报非常烦人.也许你可以创建一个专用的全屏viewController,它显示UITableView中的所有错误消息.这当然取决于典型用户将看到的警报消息的数量.如果它经常超过三个我将使用模态UIViewController一目了然地显示所有消息.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐