尝试呈现其视图不在窗口层次结构与localnotification UIAlertController
一旦用户点击本地通知,我试图呈现AlertView。 AlertView具有取消或正常的选项。
extension ViewController:UNUserNotificationCenterDelegate{ func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) { print("Tapped in notification") if(defaults.object(forKey: "alertOn") != nil){ // Create the alert controller let alertController = UIAlertController(title: "Some text", message: "Some text again", preferredStyle: .alert) // Create the actions let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.default) { UIAlertAction in } let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.cancel) { UIAlertAction in } // Add the actions alertController.addAction(okAction) alertController.addAction(cancelAction) // Present the controller self.present(alertController, animated: true, completion: nil) } } func triggerNotification(){ print("notification will be triggered in five seconds..Hold on tight") let content = UNMutableNotificationContent() content.title = "SomeText" content.body = "Some more text" content.sound = UNNotificationSound.default() let trigger = UNTimeIntervalNotificationTrigger.init(timeInterval: 5.0, repeats: false) let request = UNNotificationRequest(identifier:requestIdentifier, content: content, trigger: trigger) UNUserNotificationCenter.current().delegate = self as! UNUserNotificationCenterDelegate UNUserNotificationCenter.current().add(request){(error) in if (error != nil){ print(error?.localizedDescription) } } }
它应该显示我的alertview与选项确定或取消请求。 而是显示我的消息UIAlertController,其视图不在窗口层次结构中
当我把alertview中的viewdidapear它工作正常,但是当我把它放在userNotificationCenter我的AlertView不附加到主视图。
代码简介
extension ViewController:UNUserNotificationCenterDelegate{ func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) { Present UIAlertView } } ViewController{ Call to notification when app is in background triggerNotification() triggerNotification(){ Definition } }
尝试这个
func currentTopViewController() -> UIViewController { var topVC: UIViewController? = UIApplication.shared.delegate?.window?.rootViewController while topVC?.presentedViewController { topVC = topVC?.presentedViewController } return topVC! }
并将VC视为
let currentTopVC: UIViewController? = self.currentTopViewController() currentTopVC.present(alertController, animated: true, completion: nil)