在 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 并在HomeControllerviewDidAppear 中检查它

 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 中的变量

AppDelegate 中的 UIActivityView 使用协议和委托

AppDelegate 中的 didFinishLaunchingWithOptions 参数是啥

UIApplication 中的窗口和 AppDelegate 中的窗口是啥关系?

未修改的 AppDelegate.m 中的编译错误