Objective-C中的rootViewController和addSubview?

Posted

技术标签:

【中文标题】Objective-C中的rootViewController和addSubview?【英文标题】:rootViewController and addSubview in Objective-C? 【发布时间】:2014-11-06 09:58:03 【问题描述】:

我开始学习 OC。

第一个问题是关于_window.rootviewcontroller[_window addSubview:...]

这两种方式都可以为UIWindow设置view(实际上UIWindow是继承自UIView)。

所以我想知道的是:

是设置rootviewcontrollerwindow只是使用addSubview方法来实现,还是别的什么?

更准确地说:

_window.rootviewcontroller = viewController;

意义

[_window addSubview: viewController.view];

_window = viewController.view; //UIWindow : UIView

还是别的什么?

非常感谢。

有谁能告诉我一些关于 UIWindow 和 rootViewController 属性的细节吗?

【问题讨论】:

首先你需要了解 UIView 和 UIViewController 之间的区别 .... 享受 Cocoa,它是一个有趣的框架。欢迎来到 SO! @Scott 非常感谢! 【参考方案1】:

如果您使用 addSubview: 必须传递 UIView 实例,但是当您调用 rootviewcontroller 时,您将 UIViewController 实例传递给 UIWindow

您可以使用addSubview,但您必须将UIView 超级视图(需要为UIViewController)关联到UIWindow,以使其行为相同, 类似的东西(旧方法:

[window addSubview:myViewController.view];
[window makeKeyAndVisible];

通过使用rootviewcontroller,它会为您完成。

这取自苹果:

根视图控制器提供窗口的内容视图。 将视图控制器分配给此属性(以编程方式 或使用 Interface Builder)将视图控制器的视图安装为 窗口的内容视图。如果窗口具有现有视图 层次结构,旧视图在新视图被删除之前被删除 已安装。

【讨论】:

我认为在实现上有所不同。设置根视图控制器是使窗口视图成为对根视图 vontroller 的视图的引用。而 addSubview 是设置子视图 没错,我想知道“内容视图”的含义(实现)。使用“addSubview”也是获得“内容视图”的一种方式 @youKnowDai addSubview 将视图添加到子视图列表的末尾,仅此而已。但是 rootViewController 将视图控制器分配给它的属性,将视图控制器的视图添加为窗口的内容视图,如果已经存在,则从层次结构中删除视图。 我可能明白了。你的意思是:window和rootviewcontroller的关系和普通view和viewController的关系类似。@Greg 我真的提出了一个不好的问题......对不起:(@Greg【参考方案2】:

显然不是。根视图控制器通常分配给 appdelegate 类中的窗口。 此外,根视图控制器始终与 UINavigationController 相关联。这样 UINavigationController 的任何根视图控制器都将成为其内容视图控制器。

其中,添加子视图只是 UIView 类的一个方法。这有助于将任何子视图添加到相应的视图中。

【讨论】:

@R_Developer,请更正此行,Also, root view controller is always associated with UINavigationController.. 并非总是如此,但可能取决于要求。 @Hemang,我没听懂你。如果你能解释更多。也许这可以增加我的知识。 @R_Developer,是的,当然,rootViewController 可以是导航控制器或tabBarController 或普通的UIViewController

以上是关于Objective-C中的rootViewController和addSubview?的主要内容,如果未能解决你的问题,请参考以下文章

Objective-C中的@property和@synthesize用法

Objective-C中的方法重载?

Objective-C中的SEL (转载)

Objective-C 中的 UIScreenEdgePanGestureRecognizer

Objective-C中的引用计数

Objective-c中的点符号