之前在使用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, , 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=; i<pagecount; i++)
{
SunRealAQIViewController *realCV2=[[self storyboard]instantiateViewControllerWithIdentifier:@"test123"];
realCV2.view.frame=CGRectMake(self.view.frame.size.width*i, , self.view.frame.size.width, self.view.frame.size.height);
[self addChildViewController:realCV2];
[self.scrollView addSubview:realCV2.view];

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

iOS学习笔记——使用ChildViewController的更多相关文章

  1. iOS学习笔记-自己动手写RESideMenu

    代码地址如下:http://www.demodashi.com/demo/11683.html 很多app都实现了类似RESideMenu的效果,RESideMenu是Github上面一个stars数 ...

  2. iOS学习笔记——AutoLayout的约束

    iOS学习笔记——AutoLayout约束 之前在开发iOS app时一直以为苹果的布局是绝对布局,在IB中拖拉控件运行或者直接使用代码去调整控件都会发上一些不尽人意的结果,后来发现iOS在引入了Au ...

  3. IOS学习笔记25—HTTP操作之ASIHTTPRequest

    IOS学习笔记25—HTTP操作之ASIHTTPRequest 分类: iOS2012-08-12 10:04 7734人阅读 评论(3) 收藏 举报 iosios5网络wrapper框架新浪微博 A ...

  4. IOS学习笔记之关键词@dynamic

    IOS学习笔记之关键词@dynamic @dynamic这个关键词,通常是用不到的. 它与@synthesize的区别在于: 使用@synthesize编译器会确实的产生getter和setter方法 ...

  5. iOS学习笔记-精华整理

    iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始 ...

  6. iOS学习笔记10-UIView动画

    上次学习了iOS学习笔记09-核心动画CoreAnimation,这次继续学习动画,上次使用的CoreAnimation很多人感觉使用起来很繁琐,有没有更加方便的动画效果实现呢?答案是有的,那就是UI ...

  7. iOS学习笔记总结整理

    来源:http://mobile.51cto.com/iphone-386851_all.htm 学习IOS开发这对于一个初学者来说,是一件非常挠头的事情.其实学习IOS开发无外乎平时的积累与总结.下 ...

  8. iOS学习笔记之Category

    iOS学习笔记之Category 写在前面 Category是类别(也称为类目或范畴),使用Category,程序员可以为任何已有的类添加方法.使用类别可以对框架提供的类(无法获取源码,不能直接修改) ...

  9. iOS学习笔记之ARC内存管理

    iOS学习笔记之ARC内存管理 写在前面 ARC(Automatic Reference Counting),自动引用计数,是iOS中采用的一种内存管理方式. 指针变量与对象所有权 指针变量暗含了对其 ...

随机推荐

  1. PostgreSQL的.NET驱动程序Npgsql

    Npgsql是PostgreSQL的一个.NET数据提供程序,它可以自由获取.它可以通过下列选项获得独立的下载,也可以安装PostgreSQL数据库程序时选择安装. 最新的_npgsql2 Npgsq ...

  2. 推荐升级ASP.NET Web API 2

    ASP.NET Web API 使用很长时间了,期间也碰到不少问题,升级到WebAPI2后这些问题都解决了,稳定性方面也提升不少,所以推荐使用.碰到的问题是下面的2类: 1.multipart/for ...

  3. 【数据结构】平衡二叉树—AVL树

    (百度百科)在计算机科学中,AVL树是最先发明的自平衡二叉查找树.在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树.查找.插入和删除在平均和最坏情况下都是O(log n).增 ...

  4. Webstorm 10 for mac osx 注册机,序列号,kegen

    小菜最近get到mac体验机会,早就耳闻mac非常适合做开发,于是迫不及待的安装各种开发工具,不知不觉,轮到前端开发神器webstorm了,看了一下官网的价格,心拔凉拔凉的. 果断搜索注册机,搜到的结 ...

  5. CSharpGL(5)解析3DS文件并用CSharpGL渲染

    CSharpGL(5)解析3DS文件并用CSharpGL渲染 我曾经写过一个简单的*.3ds文件的解析器,但是只能解析最基本的顶点.索引信息,且此解析器是仿照别人的C++代码改写的,设计的也不好,不方 ...

  6. 谁占了我的端口 for Windows

    这篇文章发布于我的 github 博客:原文 今天在本地调试 Blog 的时候意外的出现了一些错误:127.0.0.1 4000 端口已经被其他的进程占用了.如何找到占用端口的进程呢? Configu ...

  7. 《Entity Framework 6 Recipes》中文翻译系列 (23) -----第五章 加载实体和导航属性之预先加载与Find()方法

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 5-2  预先加载关联实体 问题 你想在一次数据交互中加载一个实体和与它相关联实体. ...

  8. Report processing of Microsoft Dynamic AX

    Report processing of Microsoft Dynamic AX 版权声明:本文为博主原创文章,未经博主允许不得转载. The implementation of a general ...

  9. 让IE系列支持HTML5的html5shiv.js和respond.min.js

    HTML5越来越成为主流,被广大搜索引擎所使用,但IE对HTML5的支持却常被人唾弃. 解决方案有两种: 1.为网站创建多套模板,通过程序对User-Agent的判断给不同的浏览器用户显示不同的页面, ...

  10. 【Win 10应用开发】Adaptive磁贴模板的XML文档结构

    在若干天之前,老周给大家讲了Adaptive Toast通知的XML模板,所以相应地,今天老周给大家介绍一下Adaptive磁贴的新XML模板. 同样道理,你依旧可以使用8.1时候的磁贴模板,在win ...