当用户从推送通知启动应用程序时,我会显示一个视图控制器,然后推送另一个视图控制器。我提供第一个VC的代码如下
let mainStoryBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let homeNav: UIViewController = mainStoryBoard.instantiateViewController(withIdentifier: "HomeNavController") as! UINavigationController
let homePageTableVC = mainStoryBoard.instantiateViewController(withIdentifier: String(describing: HomePageTableViewController.self)) as! HomePageTableViewController
homePageTableVC.tipToPresent = tipDay
homeNav.addChildViewController(homePageTableVC)
self.window = UIWindow(frame: UIScreen.main.bounds)
self.window?.rootViewController = homeNav
self.window?.makeKeyAndVisible()
homeTableVC(在viewDidLoad方法中)使用tipToPresent属性,然后使用以下代码显示第二个VC:
if let tipDayToPresent = tipToPresent {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let tipVC = storyboard.instantiateViewController(withIdentifier: String(describing: TipViewController.self)) as! TipViewController
tipVC.dayOfTip = tipDayToPresent
tipToPresent = nil
navigationController?.pushViewController(tipVC, animated: true)
}
这很有效,但当我按后退按钮返回homePageTableVC时,导航栏为空白。通常显示的标题图像,菜单按钮和右侧栏按钮不可见。
感谢任何帮助。
答案 0 :(得分:1)
我认为问题在于如何在导航控制器上添加表格。而不是将其作为导航的根视图控制器,而是将其添加为子vc。
更改像这样的代码应该有效:
let mainStoryBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
// Remove type UIViewController
let homeNav = mainStoryBoard.instantiateViewController(withIdentifier: "HomeNavController") as! UINavigationController
let homePageTableVC = mainStoryBoard.instantiateViewController(withIdentifier: String(describing: HomePageTableViewController.self)) as! HomePageTableViewController
homePageTableVC.tipToPresent = tipDay
// Set controllers instead of adding child
homeNav.setViewControllers([homePageTableVC], animated: false)
self.window = UIWindow(frame: UIScreen.main.bounds)
self.window?.rootViewController = homeNav
self.window?.makeKeyAndVisible()
答案 1 :(得分:1)
您可以尝试更改此
homeNav.addChildViewController(homePageTableVC)
到这个
homeNav.setViewControllers([homePageTableVC], animated: false)
答案 2 :(得分:1)
如果@augie的解决方案有效,那就太好了。我建议您在处理推送通知深层链接时不应更改导航堆栈。它应该与普通应用程序启动时的行为相同。通过这种方式,您不需要处理任何边缘情况,也不需要设置不同的窗口。
解决方案:每当有人点击推送通知时,都会关闭所有呈现的控制器和popToRootViewController,然后导航到所需的屏幕。