【问题标题】:iOS Swift: Pushing two view controllers when app launched from push notificationiOS Swift:从推送通知启动应用程序时推送两个视图控制器
【发布时间】:2018-06-13 17:27:33
【问题描述】:

当用户从推送通知启动应用程序时,我会呈现一个视图控制器,然后推送另一个。我展示第一个 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()

tipToPresent 属性由 homePageTableVC(在 viewDidLoad 方法中)使用,然后使用以下代码呈现第二个 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 时,导航栏是空白的。通常显示的标题图像、菜单按钮和右栏按钮不可见。

感谢任何帮助。

【问题讨论】:

  • 您是否尝试过以编程方式将标题添加到您的代码中? navigationController.navigationBar.topItem.title = "YourTitle" 我的猜测是,由于您是以编程方式设置情节提要,如果您在界面生成器中设置标题,它将无法访问该标题。

标签: ios swift xcode swift4


【解决方案1】:

如果@augie 的解决方案有效,那就太好了。我建议您在处理推送通知深层链接时不应该更改导航堆栈。它的行为应该与正常应用程序启动中的行为相同。这样你就不需要处理任何边缘情况,也不需要设置不同的窗口。

解决方案:每当有人点击推送通知时,都会关闭所有显示的控制器和 popToRootViewController,然后导航到所需的屏幕。

【讨论】:

    【解决方案2】:

    你可以试试改一下吗

    homeNav.addChildViewController(homePageTableVC)
    

    到这里

    homeNav.setViewControllers([homePageTableVC], animated: false)
    

    【讨论】:

      【解决方案3】:

      我认为问题在于您如何在导航控制器上添加表格。与其将其作为导航的根视图控制器,不如将其添加为子 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()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-15
        • 2012-10-24
        • 1970-01-01
        • 2014-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多