如何从AppDelegate打开带有NavigationBar的ViewController?
解决打开ViewController无导航栏的问题
你当前代码直接把目标ViewController设为window的根控制器,即便你在Storyboard里将其嵌入了Navigation Controller,代码里没有实例化对应的导航控制器,自然不会显示导航栏。按以下方式修改即可:
- 打开Storyboard,给包裹目标ViewController的Navigation Controller设置一个Storyboard ID,比如命名为
TargetNavControllerID - 修改AppDelegate中的代码:
let mainStoryboard = UIStoryboard(name: "Main", bundle: nil) // 先实例化导航控制器 let navController = mainStoryboard.instantiateViewController(withIdentifier: "TargetNavControllerID") as! UINavigationController // 获取导航控制器的根视图控制器(即你要打开的ViewController) if let targetVC = navController.rootViewController as? ViewController { targetVC.receivedURL = additionalData["openURL"] as? String } self.window = UIWindow(frame: UIScreen.main.bounds) self.window?.rootViewController = navController self.window?.makeKeyAndVisible()
额外提示:
- 避免用
!强制解包additionalData["openURL"],改用as? String能防止因值为nil导致的崩溃 - 无需开启Navigation Controller的「Is Initial View Controller」选项,只要Storyboard ID设置正确即可
内容的提问来源于stack exchange,提问作者noorapps
相关产品推荐
相关产品推荐

