你的位置:首页 > 操作系统

[操作系统]iOS学习笔记——使用ChildViewController


之前在使用TableView的时候遇到过问题,需要使用另外的TableViewController来先存放TableView,原有的View则使用ViewContainer来引用TableViewController。此时是第一回接触一个ViewController中使用另一个ViewController。后来在开发的时候遇到另外的问题也需要用到ChildViewController,本来这类问题可以使用自定义的View来解决。在开发Android的时候自定义的View可以指定用某个布局文件,但是iOS的不能给自定义的View指定布局文件,靠代码去实现控件布局就很大难度,于是就搜索ViewContainer相关问题。

    使用ViewContainer其实也是在ViewController中添加一个子的ViewController。在可视化StoryBoard中可以用ViewContainer,但是用纯代码控制的话,还是用ChildViewController比较方便。

    ChildViewController是iOS5出来的新东西,iOS5给UIViewController添加了5个方法和一个属性,围绕着这个ChildViewController

// 方法addChildViewController:removeFromParentViewController: transitionFromViewController:toViewController:duration:options:animations:completion:willMoveToParentViewController:didMoveToParentViewController:// 属性@property(nonatomic,readonly) NSArray *childViewControllers

在我看来以上的方法属性可以望文生义,方法的作用依次是添加ChildViewController、去除ChildViewController,切换ChildViewController,后面的两个方法是有事件性质的,在ChildViewController切换到主的ViewController和切换完之后触发的。

但我现在的应用场景是需要把ChildView放到ScrollView里面,实现翻页的效果。

在StoryBoard中添加了两个ViewController,一个是主的里面添加了UIScrollView,另外添加的是作为添加到ParentViewController的ChildViewController。

先把ChildView的StroyBoard中添加一下命名,那么在主ViewController中构造ViewController时就可以按照StoryBoardID来构造了。

由于UIScrollView实现翻页的功能,所以要对它作以下配置

self.scrollView.contentSize=CGSizeMake(self.view.frame.size.width*pagecount, self.scrollView.frame.size.height);self.scrollView.pagingEnabled=true;

添加ChildViewController的代码如下所示

SunRealAQIViewController *realCV2=[[self storyboard]instantiateViewControllerWithIdentifier:@"test123"];realCV2.view.frame=CGRectMake(self.view.frame.size.width, 0, self.view.frame.size.width, self.view.frame.size.height);[self addChildViewController:realCV2];[self.scrollView addSubview:realCV2.view];

先是构造ChildViewController,再设置它的frame属性,这时第一页,第一页可以不设置,但第二页第三页就需要去设置,第三行则是调用UIViewController的addChildViewController的方法添加ChildViewController里面,最后则是把ChildView的视图添加到主视图的指定位置,在这里是要添加到ScrollView里面去,所以就是调用[self.scrollView addSubver:]的方法,需要添加多个相同的ChildViewController到ScrollView里面肯定用循环

  for (int i=0; i<pagecount; i++){  SunRealAQIViewController *realCV2=[[self storyboard]instantiateViewControllerWithIdentifier:@"test123"];  realCV2.view.frame=CGRectMake(self.view.frame.size.width*i, 0, self.view.frame.size.width, self.view.frame.size.height);  [self addChildViewController:realCV2];  [self.scrollView addSubview:realCV2.view];} 

就这样子开启了使用ChildViewController的大门!