You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从AppDelegate打开带有NavigationBar的ViewController?

解决打开ViewController无导航栏的问题

你当前代码直接把目标ViewController设为window的根控制器,即便你在Storyboard里将其嵌入了Navigation Controller,代码里没有实例化对应的导航控制器,自然不会显示导航栏。按以下方式修改即可:

  1. 打开Storyboard,给包裹目标ViewController的Navigation Controller设置一个Storyboard ID,比如命名为TargetNavControllerID
  2. 修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 11:25:16