IOS 学习笔记(1) 视图UIViewController
1.UIViewController *newController=[[UIViewController alloc] initWithNibName:@"XXX" bundle:nil];中XXX为名字xib的文件名,这个主要用在xib视图添加到其他视图中的时候用到,比如自定义UIView,当添加这个自定义View时,添加起xib文件名的要。
2.UIViewController创建时,函数的调用顺序如下:
[viewDidLoad]
[viewWillAppear:]
[viewWillLayoutSubviews] (iOS之后新API)
[viewDidLayoutSubviews] (IOS之后新API)
[viewDidAppear:] 当UIViewController销毁时,函数的调用顺序为:
[viewWillDisappear:]
[viewDidDisappear:]
[viewDidUnload] (IOS6之后不再被系统调用)
不过,就像人只出生和死亡一次却能够在整个人生的道路上起起伏伏,UIViewController的viewDidLoad和viewDidUnload只会被系统调用一次,但是其他几个方法会随着主View的状况,反复被调用。
3UIViewController对于旋转的支持
UIViewController在支持旋转时也拥有一套消息处理函数
算上viewWillLayoutSubviews和viewDidLayoutSubviews两个函数,这些回调函数会被系统根据固定的顺序触发调用。这个顺序会根据具体的操作系统的不同而不同
在IOS5中,此顺序如下:
[shouldAutorotateToInterfaceOrientation:]
[willRotateToInterfaceOrientation:duration:]
[viewWillLayoutSubviews]
[viewDidLayoutSubviews]
[willAnimateRotationToInterfaceOrientation:duration:]
[didRotateFromInterfaceOrientation:]
在IOS6中,此顺序如下:
[shouldAutorotate]
[supportedInterfaceOrientations]
[willRotateToInterfaceOrientation:duration:]
[viewWillLayoutSubviews]
[viewDidLayoutSubviews]
[willAnimateRotationToInterfaceOrientation:duration:]
[didRotateFromInterfaceOrientation:]
当开始调用willRotateToInterfaceOrientation:duration时,当前所有布局都还没有变
当开始调用willAnimateRotationToInterfaceOrientation:duration:时,所有界面的布局已经根据autoresize机制或者autolayout机制变更完毕,开发者只是在此函数中可以提供更多的布局配置
当开始调用didRotateFromInterfaceOrientation时,所有关于旋转的布局已经全部完成。
3.多层UIViewController
就像UIView可以addSubview和removeFormSuperview般,IOS5之后,UIViewController也能够进行多层次的叠加
UIViewController的多层编程API和UIView相似
-(void)addChildViewController:(UIViewController *)childController
-(void)removeFromParentViewController
UIViewController的多层开发比UIView的多层开发更为便捷,之所以这么说,是因为控制器所能做的事情往往不仅在于动作,更在于系统对于控制器回调函数的支持力度。
就像UIViewController,如果我们在他的子系统中重写方法
-(void)willMoveToParentViewController:(UIViewController *)parent
-(void)didMoveToParentViewController:(UIViewController *)parent
那么控制器就能完全掌握多层次叠加和撤销的过程,作为childViewController的UIViewController对象,会在父UIViewController将自己加到多层结构时调用willMoveToParentViewController,会在父UIViewController将自己撤销多层结构时调用didMoveToParentViewController
IOS 学习笔记(1) 视图UIViewController的更多相关文章
- iOS学习笔记——滚动视图(scrollView)
滚动视图:在根视图中添加UIScrollViewDelegate协议,声明一些对象属性 @interface BoViewController : UIViewController<UIScro ...
- IOS 学习笔记(3) 视图UITabbarController
1.UITabbarViewController标签试图控制器.由于标签页本就起着分类的作用,所以往往呈现的视图内容之间,可以是毫不相关的功能. UITabbarViewController仍然继承自 ...
- IOS 学习笔记(2) 视图UINavigationController
1.栈 导航控制器自身有一个针对显示内容的栈,也有一个对于导航栏的栈,当有新的内容欲显示时,进的导航栏和显示内容会被压入此栈,这样原本显示中的导航栏和显示内容则会进入到栈的更深一层中,根据栈的先进后出 ...
- [ios学习笔记之视图、绘制和手势识别]
一 视图 二 绘制 三 手势 00:31 UIGestureRecognizer 抽象类 两步 1添加识别器(控制器或者视图来完成) 2手势识别后要做的事情 UIPanGestureRecognize ...
- iOS学习笔记之触摸事件&UIResponder
iOS学习笔记之触摸事件&UIResponder 触摸事件 与触摸事件相关的四个方法如下: 一根手指或多根手指触摸屏幕 -(void)touchesBegan:(NSSet *)touches ...
- iOS学习笔记之UITableViewController&UITableView
iOS学习笔记之UITableViewController&UITableView 写在前面 上个月末到现在一直都在忙实验室的事情,与导师讨论之后,发现目前在实验室完成的工作还不足以写成毕业论 ...
- IOS学习笔记48--一些常见的IOS知识点+面试题
IOS学习笔记48--一些常见的IOS知识点+面试题 1.堆和栈什么区别? 答:管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制:对于堆来说,释放工作由程序员控制,容易产生memor ...
- iOS学习笔记-自己动手写RESideMenu
代码地址如下:http://www.demodashi.com/demo/11683.html 很多app都实现了类似RESideMenu的效果,RESideMenu是Github上面一个stars数 ...
- iOS学习笔记-自定义过渡动画
代码地址如下:http://www.demodashi.com/demo/11678.html 这篇笔记翻译自raywenderlick网站的过渡动画的一篇文章,原文用的swift,由于考虑到swif ...
- iOS学习笔记——AutoLayout的约束
iOS学习笔记——AutoLayout约束 之前在开发iOS app时一直以为苹果的布局是绝对布局,在IB中拖拉控件运行或者直接使用代码去调整控件都会发上一些不尽人意的结果,后来发现iOS在引入了Au ...
随机推荐
- 如何在一个工作站里创建多个工程(同一个xcode下面创建多个工程)
第一步,理解: 怎么会有一个xcode下面创建两个工程这一说呢,一个工程代表一个项目,意思就是有两个项目了.错.其实在一个窗口下面并不是两个工程,而是一个workspace 即一个工作站.在工作站里面 ...
- C++_基础_运算符重载
内容: (1)输入输出运算符重载 (2)友元类和友元函数 (3)双目运算符重载 (4)单目运算符重载 (5)不能被重载的运算符 (6)只能定义为成员形式的运算符 1.输入输出运算符重载如: int n ...
- intellj idea 如何设置类头注释和方法注释
intellj idea 如何设置类头注释和方法注释 intellj idea的强大之处就不多说了,相信每个用过它的人都会体会到,但是我们也会被他的复杂搞的晕头转向,尤其刚从ecl ...
- 使用mybatis查询数据,按特定顺序排序
有如下表table_people id name 1 dwyane 2 james 3 paul 4 bosh ...
- CCNA实验(5) -- OSPF
enableconf tno ip do loenable pass ciscoline con 0logg syncexec-t 0 0line vty 0 4pass ciscologg sync ...
- Maven项目 Spring 单元测试
使用maven创建web工程,将Spring配置文件applicationContext.xml放在src/resource下,用eclipse编译时提示class path resource [ap ...
- ubuntu使用crontab
crond服务通常被放在/etc/init.d/crond , 这样就可以在系统启动后自动启动crond服务. linux中的用户使用crontab命令来配置cron任务. crontab在/etc目 ...
- nyoj三个水杯(bfs)
三个水杯 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子.三个水杯之间相互 ...
- Junk-Mail Filter(并差集删点)
Junk-Mail Filter Time Limit: 15000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- ostringstream的使用方法
ostringstream的使用方法 [本文来自]http://www.builder.com.cn/2003/0304/83250.shtml http://www.cppblog.com/alan ...