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
)。
所以我想知道的是:
是设置rootviewcontroller
为window
只是使用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用法