window、rootviewcontroller、childviewcontroller、navigationcontroller 之间的关系 iOS

Relationship among window, rootviewcontroller, childviewcontroller, navigationcontroller in iOS

我还没有真正看到任何资源对 window、rootviewcontroller、childviewcontroller、navigationcontroller 之间的关系以及它们如何在 iOS 开发中拼凑起来提供良好而简单的解释。任何人都知道如何用一种易于理解的方式来表达这一点,或者任何在线资源或书籍都可以很好地解释它?

根据 UIWindow 上的文档:

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIWindow_Class/

A UIWindow object provides the backdrop for your app’s user interface and provides important event-handling behaviors. Windows do not have any visual appearance of their own, but they are crucial to the presentation of your app’s views.

Xcode 通常提供您的应用程序的主要内容 window,但您可以根据需要添加更多内容。

从文档link可以看出UIWindow实际上是一个UIView

输入您的第一个视图控制器。就像提供主 window 一样,当您在 Xcode 中开始一个新项目时,项目模板通常会连接您的初始视图控制器,顾名思义,它控制一个视图 (UIView)。

您可以将此初始视图控制器称为您的 RootViewController,但如果您获得了 UIWindow 的句柄,则可以轻松地换出当前初始视图控制器的查看您喜欢的任何其他视图控制器视图。

这可能对事物的硬性规定没有帮助,但如果我明白你在问什么,RootViewController 可能是初始视图控制器为您申请。例如,如果您使用 Storyboards,Xcode 通常会生成 Main.storyboard,您将看到一个灰色箭头指向 UIViewController 表示。

这是指向 Storyboards Initial View Controller。您可以从属性检查器中验证这一点。 Select 视图控制器然后 select 属性检查器:

这基本上就是 RootViewControllerChildViewController 只是任何其他视图控制器的子视图控制器。

我假设你指的是:

addChildViewController:

removeFromParentViewController

willMoveToParentViewController:

didMoveToParentViewController:

您可以在此处阅读有关这些方法的更多信息: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/

实现容器视图控制器

它的简要要点是,视图控制器控制视图。视图可以有子视图。这些子视图可以来自其他视图控制器。上面概述的方法几乎只允许在父视图控制器上调用这些方法时自动在子视图控制器上调用 viewWillAppearviewWillDiappear

根据文档:

By default, rotation and appearance callbacks are automatically forwarded to children. You may optionally override the shouldAutomaticallyForwardRotationMethods and shouldAutomaticallyForwardAppearanceMethods methods to take control of this behavior yourself.

a NavigationController 与任何其他视图控制器一样。它包含一些在视图之间转换的特殊行为,但与其他视图控制器一样,它有一个它管理的视图 (UIView)。导航控制器可以是您的初始视图控制器/RootViewController,就像任何其他视图控制器一样,这完全取决于您要做什么。例如,一个只是列表视图的简单应用程序,您可以在其中点击一个项目并获取详细信息视图可以构造为:

1) 初始视图控制器 -> NavigationController

2) NavigationController 的第一个 ViewController(Apple 称之为 RootViewController)将是一个 TableViewController。

3) Select在 TableView 中创建一个 TableCell(TableViewController 管理一个 TableView)然后会将您转换到详细信息视图控制器。导航控制器知道如何来回滑动。

这是一个非常简单的概述,您可以在 internet/youtube 中搜索更多功能齐全的教程,更详细地概述了同一件事。

示例:https://www.raywenderlich.com/113388/storyboards-tutorial-in-ios-9-part-1

值得您花时间做其中的一些事情来了解您的方位。是的,这可能会花费您一天中的几个小时。振作起来,每个开始 iOS 开发的人都必须经历同样的事情。 =)