检查是否显示alertview

时间:2015-12-08 13:35:07

标签: ios swift uialertcontroller

在我的应用程序中,我显示两个警报视图。如果第一个警报视图已关闭,则应弹出第二个警报视图。现在我检查警报视图是否显示如下:

    let appDelegate  = UIApplication.sharedApplication().delegate as! AppDelegate
    let viewController = appDelegate.window!.rootViewController as! ViewController

    if viewController.view.window != nil {


    }

    else {

        let alertView = UIAlertController(title: NSLocalizedString("IAP", comment: "comment"), message: NSLocalizedString("IAP1", comment: "comment"), preferredStyle: .Alert)
        alertView.addAction(UIAlertAction(title: "Ok", style: .Cancel, handler: nil))
        viewController.presentViewController(alertView, animated: true, completion: nil)
    }

如果第一个警报视图不再显示,我会发送第二个警报视图。但是,如果仍然显示第一个视图,则不会再弹出第二个警报视图。所以我的问题是如果警报视图有等待线,我该如何解决这个问题呢?

4 个答案:

答案 0 :(得分:1)

您应该为第一个操作定义处理程序,并在处理程序中显示第二个alertView。

所以而不是

UIAlertAction(title: "Ok", style: .Cancel, handler: nil)

你应该做

UIAlertAction(title: "Ok", style: .Cancel) { (action) -> Void in
            // Present the other alertView
        }

答案 1 :(得分:1)

如果您使用的是导航控制器,查看是否已显示警报的一般方法是检查presentViewController属性。

if let _ = navigationController.presentedViewController {
     print("is already presenting \(navigationController.presentedViewController)")
} else {
     navigationController.presentViewController(alert, animated:true, completion:nil)
}

答案 2 :(得分:0)

任何UIViewController中的快速补丁:(Xcode 8.3.1& Swift 3.1)

func blabla() {
    if presentedViewController != nil {
         delay(0.5, closure: {
             self.blabla()
         })
         return
    }

    // other alert code here

}

答案 3 :(得分:0)

简单的Swift登录方式

var isAlertViewPresenting: Bool {
     get {
        if self.presentedViewController is UIAlertController {
             return true
         }
        return false
        }
 }