标签:
控制器是用来处理,监听view的事件和状态。
控制器和控制器的view是两码事
一、控制器的多种创建方式
// 加载storyboard
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Two" bundle:nil];
// 创建storyboard里面箭头所指的控制器(初始化“初始控制器”(箭头所指的控制器))
// UIViewController *vc = [storyboard instantiateInitialViewController];
//创建storyboard里面storyboard ID 为pink的控制器(通过一个标识初始化对应的控制器)
MJTwoViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"pink"];
self.window.rootViewController = vc;
补充:storyboard其实就是特殊的xib文件 xib文件其实就是view
MJViewController *mj = [[MJViewController alloc] init];
MJViewController *mj = [[MJViewController alloc] initWithNibName:@"MJViewController" bundle:nil];
二、控制器的view的创建
1.
官方图(少了nibName的判断)
2.控制器view的延迟加载(懒加载)
三、控制器view的生命周期
/**
* view加载完毕
*/
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"MJOneViewController-viewDidLoad");
}
/**
* view即将显示到window上
*/
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
NSLog(@"MJOneViewController-viewWillAppear");
}
/**
* view显示完毕(已经显示到窗口)
*/
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
NSLog(@"MJOneViewController-viewDidAppear");
}
/**
* view即将从window上移除(即将看不见)
*
*/
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
NSLog(@"MJOneViewController-viewWillDisappear");
}
/**
* view从window上完全移除(完全看不见)
*
*/
- (void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
NSLog(@"MJOneViewController-viewDidDisappear");
}
/**
* view即将销毁的时候调用
*/
- (void)viewWillUnload
{
[super viewWillUnload];
}
/**
* view销毁完毕的时候调用
*/
- (void)viewDidUnload
{
[super viewDidUnload];
// 由于控制器的view已经不在了,需要显示在view上面的一些数据也不需要
self.apps = nil;
self.persons = nil;
//
// [self.apps release];
// [self.persons release];
}
/**
* 当接收到内存警告的时候
*/
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
内存警告处理(先传到AppDelegate 对象里的applicationDidReceiveMemoryWarning:方法对整个app内存处理 再传到控制器里的
didReceiveMemoryWarning:方法掉super方法自动把没有显示在Window上的控制器的view移除nil 在MRC下还需在viewDidUnload :方法如下图
四、多控制器管理
1.理解对多控制的管理
可轻松管理多个控制器,轻松完成控制器之间的切换
2.UINavigationController的简单使用
// 1.创建导航控制器
MJOneViewController *one = [[MJOneViewController alloc] init];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:one];
// 存放所有子控制器的栈
// nav.viewControllers
// 这个数组也存放子控制器
// nav.childViewControllers
// 2.添加子控制器
// MJOneViewController *one = [[MJOneViewController alloc] init];
// [nav addChildViewController:one];
// [nav pushViewController:one animated:YES];
// nav.viewControllers = @[one];
// 3.设置为窗口的根控制器
self.window.rootViewController = nav;
[self.window makeKeyAndVisible];
@property(nonatomic,copy) NSArray *viewControllers;
@property(nonatomic,readonly) NSArray *childViewControllers;
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated;
•使用pop方法可以移除控制器
- (UIViewController *)popViewControllerAnimated:(BOOL)animated;
- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated;
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated;
(3)UINavigationController的view结构(简单的理解复杂的需更深的挖掘 用递归把其子view都打印出来)
(4)如何修改导航栏的内容
@property(nonatomic,retain) UIBarButtonItem *backBarButtonItem;
@property(nonatomic,retain) UIView *titleView;
@property(nonatomic,copy) NSString *title;
@property(nonatomic,retain) UIBarButtonItem *leftBarButtonItem;
@property(nonatomic,retain) UIBarButtonItem *rightBarButtonItem;
(5)深层挖掘 UINavigationController是如何管理控制器的?(只有导航控制器可以操作push(推入)pop(跳出))
当one控制器被push进来 one控制器会被放入栈里 既是栈底又是栈顶 这时one控制器的view会被创建并放到导航控制器的view上
当two控制器被push进来 two控制器会被放入栈里 two控制器称为栈顶 这时two控制器的view会被创建并放到导航控制器的view上,one控制器的view处于休息状态并未销毁
当three控制器被push进来 three控制器会被放入栈里 three控制器称为栈顶 这时three控制器的view会被创建并放到导航控制器的view上,two控制器的view处于休息状态并未销毁
当three控制器pop出来 two控制器位于栈顶 所以显示two控制器的view 这时three控制器被销毁其view也销毁了
补充知识:
1.iOS7特性是全屏化 window全屏显示 控制器的view也全屏显示 在导航控制器中导航条的颜色可以同化状态栏的颜色,其导航栏高度还是44容易误认为是64
标签:
原文地址:http://www.cnblogs.com/junhuawang/p/4628821.html