为什么在UIKit中推送ViewController有导航控制器?

问题描述 投票:0回答:1

我没有像这样使用故事板和设置 sceneDelegate

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_ViewController 中调用导航控制器:

print(self?.navigationController)

它打印“nil”。并且,无法导航到其他 ViewController。
这是有道理的,因为我没有初始化导航控制器。

如果像这样编辑 sceneDelegate 代码:

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

并从A_ViewController推送其他VC,然后
Pushed ViewController 有自己的导航控制器

我没有初始化推送的VC的

navigationController
。为什么推VC有
navigationController

ios swift uikit uinavigationcontroller
1个回答
0
投票

UINavigationController

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

所以它是一组视图控制器而不是单个视图控制器。每当您

push
一个新控制器时,UINavigationController 中的内部
controllers
数组都会附加一个新元素。反之亦然,使用
pop
控制器将从该数组中删除。您可以假设它可能是工作流程中的
singleton
导航器,直到您呈现新的工作流程(没有新的 UINavigationController)。

您可以在文档中看到这一点。所有这些视图控制器:

Setting
General
Auto-Lock
都具有相同的 UINavigationController 实例,尽管它可能在
Setting
屏幕上创建一次。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.