一、导航视图控制器
1.管理视图控制器
2.控制视图控制器之间的跳转
3.是以压栈和出栈的形式来管理视图控制器
4.导航视图控制器必须要设置根视图控制器
5.导航是视图控制器包含UINavigationBar,而且UINAvigationBar是被每个视图控制器俩管理的
UINavigationBar包含NavigationItem(一个标题,两个按钮)
6.push压栈是要alloc新对象来显示,POP出栈是返回已经存在的对象,所以不要alloc
//初始化根视图
FirstViewController *firstViewController =[[FirstViewController alloc] init];
//创建一个导航视图控制器,并且设置其根视图控制器
UINavigationController *navigationController =[[UINavigationController alloc] initWithRootViewController:firstViewController];
//如果使用导航视图控制器来管理视图,那么就不要使用firstViewController作为window的根视图,使用导航视图控制。因为导航视图控制器已经接管了视图
self.window.rootViewController =navigationController;
//因为UIViewController的懒加载机制 所以必须使用其view的时候才会去调用一系列的view的创建和显示过程
//试图控制器的创建 相当于在内存创建其对象
SecondViewController *secondViewController =[[SecondViewController alloc] init];
//隐藏导航条
navigationController.navigationBar.hidden=YES;
//以压栈的形式把secondViewController放入导航视图控制器中
[self.navigationController pushViewController:secondViewController animated:YES];
//pop当前对象到上个视图
[self.navigationController popViewControllerAnimated:YES];
//pop到根试图
[self.navigationController popToRootViewControllerAnimated:YES];
//pop指定的视图控制器
NSArray *array = self.navigationController.viewControllers;
[self.navigationController popToViewController:[array objectAtIndex:0] animated:YES];
输出数组只能元素的信息(内存地址和所属类型)
NSLog(@"%@",[array objectAtIndex:0]);
输出数组中的元素个数
NSLog(@"----->>>>>>~~~%d",[array count]);
二、UIBarButtonItem
//创建一个UIBarButtonItem
UIBarButtonItem *rightBarButtonItem =[[UIBarButtonItem alloc] initWithTitle:@"
设置标题
" style:UIBarButtonItemStylePlain(设置类型) target:self(设置目标) action:@selector(btnCilck:)(绑定方法)];
//设置item 右按钮
self.navigationItem.rightBarButtonItem =rightBarButtonItem;
三、生命周期传值
//给FirstViewController对象属性value 赋值的过程
-(void)viewWillDisappear:(BOOL)animated
{
UITextField *textFiled =(UITextField *)[self.view viewWithTag:100];
//获得当前导航试图控制器如包含的所有试图控制器对象
NSArray *array = self.navigationController.viewControllers;
//获得根试图对象
FirstViewController * fv = [array objectAtIndex:0];
//输入框内容赋值给根试图属性
fv.value = textFiled.text;
NSLog(@"我区~~~");
[super viewWillDisappear:YES];
}
//使用给FirstViewController对象属性value 把值传过来
-(void)viewWillAppear:(BOOL)animated
{
NSLog(@"我有回来了~~");
UITextField *textFiled =(UITextField *)[self.view viewWithTag:100];
textFiled.text =self.value;
[super viewWillAppear:YES];
}
四、生命周期
//loadView 和viewDidLoad只会加载一次 在一个试图控制器的生命周期中
//viewWillAppear和viewDidAppear 只要执行View显示功能就会执行
//当前试图正在加载
-(void)loadView
{
NSLog(@"当前试图正在加载");
[super loadView];
}
//当前试图加载完毕
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"当前试图加载完毕");
}
//当前试图将要显示
-(void)viewWillAppear:(BOOL)animated
{
NSLog(@"当前试图将要显示");
[super viewWillAppear:YES];
}
//当前试图已经显示
-(void)viewDidAppear:(BOOL)animated
{
NSLog(@"当前试图已经显示");
[super viewDidAppear:YES];
}
//当前试图将要消失
-(void)viewWillDisappear:(BOOL)animated
{
NSLog(@"---->>>当前试图将要消失");
[super viewWillDisappear:YES];
}
//当前试图已经消失
-(void)viewDidDisappear:(BOOL)animated
{
NSLog(@"---->>>当前试图已经消失");
[super viewDidDisappear:YES];
}
//试图控制机对象被释放的时候会自动调用此方法(手动管理内存)
-(void)dealloc
{
NSLog(@"试图控制器被释放了");
[super dealloc];
}
//
干掉试图控制器
[干掉第二个视图控制器(最后一次返回)release];