我不会像这样使用故事板和设置场景委托

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        
        guard let windowScene = (scene as? UIWindowScene) else { return }
        
        let vc = A_ViewController()
        
        let window = UIWindow(windowScene: windowScene)
        window.rootViewController = vc
        window.makeKeyAndVisible()

        self.window = window
    }

在此代码中,导航控制器未初始化.而且,如果我像这样在A_View Controller中调用导航控制器:

print(self?.navigationController)

It prints "nil". And, Can't navigate to other ViewControllers.
It make sense because I didn't initialized navigation controller.

如果像这样编辑sceneDelegate代码:

let rootNavigationController = UINavigationController(rootViewController: vc)
window.rootViewController = rootNavigationController

And push other VC from A_ViewController, then
Pushed ViewController has it's own navigation controller

我没有初始化推送VC的navigationController.为什么推VC有navigationController个?

推荐答案

UINavigationController:

导航控制器是管理导航界面中的一个或多个子视图控制器的容器视图控制器

因此,它是一组视图控制器,而不是单个视图控制器.每当您push个新控制器时,UINavigationController中的内部controllers数组都会添加新元素.反之亦然,如果使用pop,则控制器将从该数组中删除.您可以假设它可能是工作流中的singleton导航器,直到您呈现新的工作流(没有新的UINavigationController).

您可以在文档中看到这一点.所有这些视图控制器:SettingGeneralAuto-Lock都具有相同的UINavigationController实例,尽管它可能在Setting屏幕上创建一次.

enter image description here

Ios相关问答推荐

如何加密字符串使用AES. GCM在Dart和解密相同的Swift?

实例方法wait在异步上下文中不可用;请改用TaskGroup;这是Swift 6中的错误''

如何访问iOS模拟器中的zoom 设置?(在搜索中列出,但不可见)

在TVOS中访问SWIFT中的objc++函数时发送给类的无法识别的 Select 符

如何在SwiftUI中为带有CornerRadius的矩形创建下边框?

expo EAS build (iOS) 在 Pod 安装步骤中失败 (SDK45 & 46)

错误:无法根据成员environmentObject推断上下文基础

Swift 图表:.chartYScale 似乎只适用于 100 的增量?

通过隐藏和显示视图在 iMessage 应用程序中使用不同的视图

通过 tuist/XcodeProj 以编程方式将文件添加到本机目标

SwiftUI:添加核心数据项时更新选项卡栏徽章

每次运行后,Xcode 6 都会在 iOS8 模拟器中重命名我的应用程序目录.

如何在 Xcode 4 中切换 .h 和 .m

如何从一个特定的视图控制器中隐藏导航栏

在 iOS 8 中显示相机权限对话框

SRCROOT 和 PROJECT_DIR 有什么区别?

cocoapods中~>的用法是什么

从故事板导航到其他 Swift 1.2 文件时 Xcode 6.3 崩溃

在 NSUserDefaults 中存储值是否有任何限制?

请在您的 Podfile 中为此目标指定一个平台?