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, , 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的更多相关文章
- iOS学习笔记-自己动手写RESideMenu
代码地址如下:http://www.demodashi.com/demo/11683.html 很多app都实现了类似RESideMenu的效果,RESideMenu是Github上面一个stars数 ...
- iOS学习笔记——AutoLayout的约束
iOS学习笔记——AutoLayout约束 之前在开发iOS app时一直以为苹果的布局是绝对布局,在IB中拖拉控件运行或者直接使用代码去调整控件都会发上一些不尽人意的结果,后来发现iOS在引入了Au ...
- IOS学习笔记25—HTTP操作之ASIHTTPRequest
IOS学习笔记25—HTTP操作之ASIHTTPRequest 分类: iOS2012-08-12 10:04 7734人阅读 评论(3) 收藏 举报 iosios5网络wrapper框架新浪微博 A ...
- IOS学习笔记之关键词@dynamic
IOS学习笔记之关键词@dynamic @dynamic这个关键词,通常是用不到的. 它与@synthesize的区别在于: 使用@synthesize编译器会确实的产生getter和setter方法 ...
- iOS学习笔记-精华整理
iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始 ...
- iOS学习笔记10-UIView动画
上次学习了iOS学习笔记09-核心动画CoreAnimation,这次继续学习动画,上次使用的CoreAnimation很多人感觉使用起来很繁琐,有没有更加方便的动画效果实现呢?答案是有的,那就是UI ...
- iOS学习笔记总结整理
来源:http://mobile.51cto.com/iphone-386851_all.htm 学习IOS开发这对于一个初学者来说,是一件非常挠头的事情.其实学习IOS开发无外乎平时的积累与总结.下 ...
- iOS学习笔记之Category
iOS学习笔记之Category 写在前面 Category是类别(也称为类目或范畴),使用Category,程序员可以为任何已有的类添加方法.使用类别可以对框架提供的类(无法获取源码,不能直接修改) ...
- iOS学习笔记之ARC内存管理
iOS学习笔记之ARC内存管理 写在前面 ARC(Automatic Reference Counting),自动引用计数,是iOS中采用的一种内存管理方式. 指针变量与对象所有权 指针变量暗含了对其 ...
随机推荐
- 一步一步学ROP之linux_x86篇
一步一步学ROP之linux_x86篇 作者:蒸米@阿里聚安全 一.序 ROP的全称为Return-oriented programming(返回导向编程),这是一种高级的内存攻击技术可以用来绕过 ...
- 你的眼睛背叛你的心:解决 .NET Core 中 GetHostAddressesAsync 引起的 EnyimMemcached 死锁问题
在我们将站点从 ASP.NET + Windows 迁移至 ASP.NET Core + Linux 的过程中,目前遇到的最大障碍就是 —— 没有可用的支持 .NET Core 的 memcached ...
- ABP理论学习之Javascript API(理论完结篇)
返回总目录 本篇目录 Ajax Notification Message UI block和busy 事件总线 Logging 其他工具功能 说在前面的话 不知不觉,我们送走了2015,同时迎来了20 ...
- logistic回归
logistic回归 回归就是对已知公式的未知参数进行估计.比如已知公式是$y = a*x + b$,未知参数是a和b,利用多真实的(x,y)训练数据对a和b的取值去自动估计.估计的方法是在给定训练样 ...
- Windows Azure Storage (18) 使用HTML5 Portal的Azure CDN服务
<Windows Azure Platform 系列文章目录> Update:2015-04-15 如果读者使用的是国内由世纪互联运维的Azure China服务,请参考笔者的文档:Azu ...
- 【Android环境搭建】解决安装使用SDK Manager更新时的问题
问题描述: 安装使用SDK Manager更新时出现问题 Failed to fetch URL https://dl-ssl.google.com/android/repository/repos ...
- LINQ系列:Linq to Object分区操作符
分区是指将一个单一的输入序列划分成两个或多个部分或序列,同时不会对输入元素重排序,返回一个新形成的部分.LINQ分割操作符包括Skip.SkipWhile.Take和TakeWhile. 1. Ski ...
- 移动web app开发必备 - Deferred 源码分析
姊妹篇 移动web app开发必备 - 异步队列 Deferred 在分析Deferred之前我觉得还是有必要把老套的设计模式给搬出来,便于理解源码! 观察者模式 观察者模式( 又叫发布者-订阅者模 ...
- Lightmaping
一.基本知识点 1.Baked Only:不会传入shader,只有烘焙时才有用,也就是_LightColor0等这种变量不会表示一个Baked Only Light(前提是场景有lightmap,如 ...
- js 获取当前的时间
第一个小程序,用js获取当前的时间,,比较特殊的是 月是从0开始算的,显示的时候要加1,获取日用getDate(),获取周 getDay(), 直接上代码 <!DOCTYPE html> ...