iOS中的window,rootviewcontroller,childviewcontroller,navigationcontroller之间的关系

时间:2016-04-25 02:26:11

标签: ios viewcontroller

我还没有真正看到任何资源能够对窗口,rootviewcontroller,childviewcontroller,navigationcontroller之间的关系以及它们在iOS开发中如何组合起来提供一个简单的解释。任何人都知道如何以易于理解的方式或任何在解释它的方面做得很好的在线资源或书籍?

1 个答案:

答案 0 :(得分:0)

根据UIWindow上的文档:

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

  

UIWindow对象为应用的用户界面提供背景,并提供重要的事件处理行为。 Windows没有自己的视觉外观,但它们对于应用程序视图的呈现至关重要。

Xcode通常提供应用程序的主窗口,但如果需要,可以添加更多。

从文档链接中,您可以看到UIWindow实际上是UIView

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

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

这可能对事情的硬性和快速规则没有帮助,但如果我理解你的要求, RootViewController 可能是你应用程序的初始视图控制器。例如,如果您使用的是Storyboard,Xcode通常会生成Main.storyboard,您将看到一个指向UIViewController表示的灰色箭头。

gray arrow

这是指向Storyboard初始视图控制器。您可以从“属性”检查器中对此进行验证。选择视图控制器,然后选择属性检查器:

initial view controller

所以这基本上是 RootViewController ChildViewController 只是视图控制器的子视图的任何其他视图控制器。

我假设你指的是:

addChildViewController:

removeFromParentViewController

willMoveToParentViewController:

didMoveToParentViewController:

您可以在此处详细了解这些方法: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/

实施容器视图控制器

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

根据文档:

  

默认情况下,旋转和外观回调会自动转发给子级。您可以选择覆盖shouldAutomaticallyForwardRotationMethodsshouldAutomaticallyForwardAppearanceMethods方法来自行控制此行为。

NavigationController 就像任何其他视图控制器一样。它包含一些在视图之间转换的特殊行为,但与其他视图控制器一样,它具有它管理的View(UIView)。导航控制器可以是您的初始视图控制器/ RootViewController ,就像任何其他视图控制器一样,它只取决于您尝试做什么。例如,一个只是列表视图的简单应用程序可以构建为:

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

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

3)在TableView中选择TableCell(TableViewController管理TableView)然后将您转换到Detail View Controller。导航控制器知道如何做所有那些来回滑动的戏剧。

这是一个相当简单的概述,您可以在互联网/ youtube上搜索更多全功能教程,更详细地概述相同的内容。

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

值得花时间做一些这些来获得你的方位。是的,它可能会花费你几天的时间。请记住,每个开始进行iOS开发的人都必须经历同样的事情。 =)