在我的应用程序中,我显示两个警报视图。如果第一个警报视图已关闭,则应弹出第二个警报视图。现在我检查警报视图是否显示如下:
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)
}
如果第一个警报视图不再显示,我会发送第二个警报视图。但是,如果仍然显示第一个视图,则不会再弹出第二个警报视图。所以我的问题是如果警报视图有等待线,我该如何解决这个问题呢?
答案 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
}
}