UIViewController - View Management(视图管理)

来源:互联网 发布:mac 覆盖重装系统 编辑:程序博客网 时间:2024/04/29 01:30

       每个view controller管理着一个view hierarchy,view hierarchy 的根视图存储在view controller类的view属性中,根视图主要充当一个剩余view hierarchy的容器,根视图的大小和位置是由持有此根视图的对象决定的,该对象要么是一个父view controller,要么是当前app的window。被window持有的view controller是app的根视图控制器,其view填满了整个window。

       view controllers懒得加载他们的views,第一次访问view属性时加载和创建view controller的视图,对于一个view controller,有几种方法来指定其视图:

在app的storyboard文件中指定view controller和其视图。storyboard是指定视图的首选方法。通过storyboard,你可以指定视图以及这些视图与view controller之间的连接关系。你也可以指定view controllers之间的关系和segues,这样做方便观看和修改app的行为。

从一个storyboard加载一个view controller,选取合适的UIStoryboard对象并调用其 instantiateViewControllerWithIdentifier: 方法,storyboard对象创建了view controller并且将它返回到代码中。

 ● 使用nib文件为一个view controller指定视图。一个nib文件可以指定单个view controller的视图,但不会让你定义view controller之间的segues和关系,nib文件也仅仅存储有关于view controller自身的最小的信息量。

   使用一个nib文件去初始化一个view controller,以编程方式创建自己的view controller 类,并且用 initWithNibName:bundle:方法初始化它。当它的视图被请求时,view controller从nib文件中加载它们。

● 使用 loadView 方法为一个view controller指定视图。在这个方法中,以编程方式创建你自己的view hierarchy,并将这个view hierarchy的根视图传给view controller的 view 属性。

以上所有技术都有个相同的结果,那就是创建合适的视图组,并且通过 view 属性显示它们。

IMPORTANT:一个view controller是其视图以及其创建的子视图的唯一持有者。view controller有责任创建这些视图,并且在合适的时间放弃所有权,比如,当view controller自身被释放的时候。如果用一个storyboard或者一个nib文件存储视图对象,当view controller的需要时,每个view controller对象自动获取这些视图自身的copy。然而,如果手动创建视图,每个view controller必须有它自己的唯一的视图组,你不能在view controller之间分享视图。

一个view controller的根视图总是根据分配的空间来调整自身大小。对于view hierarchy中的其他视图,使用Interface Builder指定Auto Layout约束,这可以管理每个视图在其父视图的边界(bounds)内是怎么放置和设定大小的。你也可以以编码的方式创建约束,并在合适的时候将其添加到视图中。了解更多关于如何创建约束的信息,请参考Auto Layout Guide。


0 0
原创粉丝点击