How to show UIAlertController from Appdelegate

Viewed 34656

I'm working with PushNotification on iOS app. I would like to show a UIalertcontroller when the app receive a notification.

I try this code below in the AppDelegate:

[self.window.rootViewController presentViewController:alert animated:YES completion:nil];

But the UIAlertcontroller is showing in the root View (First screen) and for other uiviewcontroller i got warning or the app crashes.

6 Answers

Anbu.Karthik's answer but in Swift 4.1

var topWindow: UIWindow? = UIWindow(frame: UIScreen.main.bounds)
topWindow?.rootViewController = UIViewController()
topWindow?.windowLevel = UIWindowLevelAlert + 1
let alert: UIAlertController =  UIAlertController(title: "APNS", message: "received Notification", preferredStyle: .alert)
    alert.addAction(UIAlertAction.init(title: "OK", style: .default, handler: { (alertAction) in
        topWindow?.isHidden = true
        topWindow = nil
    }))

topWindow?.makeKeyAndVisible()
topWindow?.rootViewController?.present(alert, animated: true, completion:nil)

Thanks for reading this.

Swift 4.1 You can use the following code to present alert from AppDelegate

func showAlertFromAppDelegates(){
    let alertVC = UIAlertController(title: "Oops" , message: "Presented Alert from AppDelegates", preferredStyle: UIAlertControllerStyle.alert)
    let okAction = UIAlertAction(title: "Okay", style: UIAlertActionStyle.cancel) { (alert) in
        exit(0) // Your code here
    }
    alertVC.addAction(okAction)
    DispatchQueue.main.async {
        var presentVC = self.window?.rootViewController
        while let next = presentVC?.presentedViewController {
            presentVC = next
        }
        presentVC?.present(alertVC, animated: true, completion: nil)
    }
}
Related