首页 > 解决方案 > NavigationController PushViewController 不显示

问题描述

我正在尝试导航到ClassroomViewController收到推送通知后的位置。我已经设置了一个断点,它会命中所有行,但它没有显示ClassroomViewController. 我想知道我当前的实现中缺少什么。

我在故事板上添加了标识符ClassroomViewController

应用委托

public var keyWindow: UIWindow? {
 return UIApplication.shared.windows.first { $0.isKeyWindow }
}

不起作用的辅助方法。我想知道为什么以下方法不起作用。

private func notificationToNavigate() {
  guard let appDelegate = UIApplication.shared.delegate as? AppDelegate,
          let topViewController = appDelegate.keyWindow?.rootViewController
  else { return }

  let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
  let cVC = storyboard.instantiateViewController(withIdentifier:"ClassroomViewController") as! ClassroomViewController
  topViewController.navigationController?.pushViewController(cVC, animated: true)
}

有效的辅助方法

private func notificationToNavigate() {
  guard let window = UIApplication.shared.keyWindow else { return }

  let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
  let cVC = storyboard.instantiateViewController(withIdentifier:"ClassroomViewController") as! ClassroomViewController
  window.rootViewController = UINavigationController(rootViewController: cVC)
  window.makeKeyAndVisible()
}

标签: swift

解决方案


如果topViewController确实是关键窗口的根视图控制器,那么它不能导航控制器;如果推送是可能的,那么它必须一个导航控制器。所以你会说

(topViewController as? navigationController)?.pushViewController...

另一方面,如果不是topViewController导航控制器(因此上述失败),那么推送是根本不可能的,您需要考虑其他事情要做。


推荐阅读