我可以创建的 RootViewController、AppDelegate 和 View Controller 类之间有啥区别?
Posted
技术标签:
【中文标题】我可以创建的 RootViewController、AppDelegate 和 View Controller 类之间有啥区别?【英文标题】:What's the difference between the RootViewController, AppDelegate and the View Controller classes that I may create?我可以创建的 RootViewController、AppDelegate 和 View Controller 类之间有什么区别? 【发布时间】:2010-09-02 11:43:18 【问题描述】:我正在尝试为 iPhone 学习编程,但我不断看到这些文件,我不确定在执行为 iPhone 构建的程序时,每个文件和这些文件的内容何时被引用。我正在尝试遵循在线提供的教程和提示,但没有任何地方可以进行逐点比较或类似的东西。如果你们中的任何人都可以列出一些基本差异,例如何时引用每个文件以及理想情况下应该进入每个文件的内容等等,那就太好了。已经感谢您的宝贵时间了。
【问题讨论】:
【参考方案1】:通常,可以将委托视为事件处理程序。因此,AppDelegate 是整个应用程序的主要事件处理程序。它被告知应用程序何时启动、何时退出、推送通知何时到来、应用程序何时进入后台等。其中一个事件 - applicationDidFinishLaunching - 通常负责创建应用程序的窗口并添加视图到那个窗口。
在大多数应用程序中,添加到窗口的视图实际上是由 UIViewController 控制的。每个 UIViewController 负责管理一个主视图及其所有子视图的外观。例如,一个 UITableViewController 负责管理一个 UITableView(主视图)和所有插入到该 UITableView 中的 UITableViewCells(子视图)。 UIViewController 通常充当它负责的视图的委托(事件处理程序)。当用户点击表格视图单元格时,会调用 UITableViewController 中的方法。当用户滑动删除一个单独的方法被调用。
通用 UIViewController 提供相同的基本功能,但用于自定义视图。例如,UIViewController 可能负责显示一些文本视图和一个按钮。 UIViewController 将创建它的主视图、文本视图和按钮视图。文本视图和按钮视图将作为子视图添加到视图控制器的主视图中。 UIViewController 会将自己注册为来自文本视图的事件的委托(例如,了解用户何时完成了文本视图中的文本编辑)。它还将注册一个方法来处理源自它拥有的按钮的按钮按下。当任何这些注册事件发生时,UIViewController 上的方法会被调用,允许您采取任何需要的操作。
rootViewController 是与导航控制器一起使用的特定类型的视图控制器。如果您想要一个具有典型 ios 导航视图层次结构的应用程序,您的 AppDelegate 通常会将 UINavigationController 添加到应用程序的窗口中。如果没有实际要显示的内容,那 UINavigationController 就毫无用处。这就是 rootViewController 发挥作用的地方。您负责提供一个视图控制器(例如上面描述的那个)作为存储在 UINavigationController 的视图堆栈中的第一个视图。该视图将在应用启动时以及用户从 UINavigationController 的堆栈中弹出后续 ViewController 时显示。
我意识到啰嗦了 - 但希望它有所帮助。
【讨论】:
完全有帮助。谢谢。我还有一个问题,如果它的要求不高,如果你能看一下就好了:***.com/questions/3651265/…。无论如何感谢这个答案。 对 AppDelegate、UIWindow、UIViewController、主视图、子视图等之间关系的精彩解释。在 2012 年末仍然有效。非常感谢 感谢@Peter,绝对是对每种对象的作用最有用和最简洁的解释之一。谢谢。以上是关于我可以创建的 RootViewController、AppDelegate 和 View Controller 类之间有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
以编程方式创建的 rootviewcontroller 未显示分配的 viewcontroller 的内容
UIWindow 的 rootViewController 属性
navigationController 不会返回到 rootViewController
更改窗口 rootViewController 后出现 UITabBarController