在 appDelegate 中的 didReceiveRemoteNotification 方法的 Present 模式后推送控制器
Posted
技术标签:
【中文标题】在 appDelegate 中的 didReceiveRemoteNotification 方法的 Present 模式后推送控制器【英文标题】:Push controller after Present modal on didReceiveRemoteNotification method in appDelegate 【发布时间】:2018-05-11 21:15:28 【问题描述】:我需要在 didReceiveRemoteNotification appDelegate 方法内的当前完成处理程序中推送一个 viewController。
我的视图/控制器结构:
Splash > LoginController (UIViewController) > HomeController (UINavigationController)
当我收到新通知时,我想从 HomeController 推送新的 UIViewController。
到目前为止我所拥有的:
接收通知并获取数据 在didReceiveRemoteNotification中获取window.rootViewController(LoginController) 使用 present(_:animated:completion:) 方法呈现 navBarController(这样做我可以看到 HomeController,因为控制器是 rootviewcontroller)
我需要什么?
推送 ProductDetailController
我已经尝试过了:
从 navBarController 推送 从 HomeController 的新实例推送
我得到了(但不想)
在完成处理程序上将 ProductDetailController 显示为模态。
提前致谢!
【问题讨论】:
【参考方案1】:在didReceiveRemoteNotification
的默认值中设置Bool
值,例如true
并在HomeController
的viewDidAppear
中检查它
override func viewDidAppear(_ animated:bool)
super.viewDidAppear(animetd:animated)
if UserDefaults.standard.bool(forKey:"presentDetails")
let vc = self.storyboard?.instantiateViewController(withIdentifier: "detailsID") as! ProductDetailController
self.navigationController?.pushViewController(vc, animated: true)
UserDefaults.standard.set(false,forKey:"presentDetails")
【讨论】:
但是如果我这样做,用户在应用程序上输入的所有时间他都会推送详细信息控制器。我只想在用户收到通知编辑时推送详细信息:哇,我明白了!使用默认值来指示是否是通知,对吧? 知道了... 同意你的观点,但老实说,我不想为 HomeController 添加更多职责,但我认为这是唯一的方法。谢谢大佬! @GustavoBergamo 其实你可以在导航中嵌入登录,当你收到通知时获取root作为导航并直接推送 在应用程序的第一个版本中,LoginController 嵌入在 Navigation 中,我将其取下是因为 UX 团队告诉我这样会更好。谢谢以上是关于在 appDelegate 中的 didReceiveRemoteNotification 方法的 Present 模式后推送控制器的主要内容,如果未能解决你的问题,请参考以下文章
在 AppDelegate 中使用 ViewController 中的数组
AppDelegate 中的 UIActivityView 使用协议和委托
AppDelegate 中的 didFinishLaunchingWithOptions 参数是啥