iOS视图控制器<2>

来源:互联网 发布:便签元数据修复 编辑:程序博客网 时间:2024/04/29 03:23

Container View Controllers 容器视图控制器

UITabBarController、UINavigationController、UIPageViewController都是内置的父视图控制器:你将子视图控制器传给它们,它们会将子视图控制器的视图放进它们自己的视图中。

在iOS5中,苹果引入了一种连贯的方式来让你创建自己的父视图控制器,可以有效地管理子视图控制器,把子视图控制器的视图放进界面中。这种自定义的父视图控制器叫做容器视图控制器(container view controller)

添加和移除子视图控制器

视图控制器有个数组类型的可读属性:public var childViewControllers: [UIViewController] { get },那么,视图控制器便可以成为父视图控制器,但是,你不能仅仅只填充这个数组。为了成为父视图控制器,你的视图控制器子类必须要实现某些职责:

  • 添加子视图控制器:
    当一个视图控制器要成为你定义的父视图控制器的子视图控制器时,你定义的父视图控制器必须要按照下面的顺序来完成这些事情:
    1.发送addChildViewController:消息给自身,子视图控制器作为参数,子视图控制器会自动添加到childViewControllers数组中,会被保持。
    2.让子视图控制器的视图进入界面中(作为你定义的父视图控制器的视图的子视图)
    3.向子视图控制器发送didMoveToParentViewController:消息,你定义的父视图控制器作为参数
  • 移除子视图控制器
    1.向子视图控制器发送willMoveToParentViewController:消息,参数为nil
    2.从你的界面中移除子视图控制器的视图
    3.向子视图控制器发送removeFromParentViewController消息。子视图控制器会自动从父视图控制器的childViewController数组中移除。

记住:addChildViewController:会自动为你发送willMoveToParentViewController:这个消息;removeFromParentViewController会自动为你发送didMoveToParentViewController:消息

为父视图控制器添加一个子视图控制器:

let son=sonController()        self.addChildViewController(son)        son.view.frame=self.view.frame        self.view.addSubview(son.view)        son.didMoveToParentViewController(self)

下一个问题是如何用另一个子视图控制器的视图来替代界面上的视图控制器的视图?方法是向父视图控制器发送下面的消息:

transitionFromViewController:toViewController: duration: options: animations:completion:

上面的方法会很好地对视图进行管理,在transition之前,添加一个子视图控制器的视图到界面上,在transition之后,移除另一个子视图控制器的视图从界面上。

0 0
原创粉丝点击