导航控制器 UI_08(上)

主要内容:UINavigationController 重要:属性传值(向后一个界面传值)、代理传值(向前相邻的界面传值)、单例传值(不相邻的界面向前传值)
1、UINavigationController   导航控制器,是用来管理多个单视图控制器的控制器,此时他管理的多个单视图控制器之前有一定的层级关系(依赖关系,即下一个页面的出现要依赖于上一个页面),导航视图控制器创建时也会自带一个View,之不过此时它上面有来年各个子视图,一个是contentView ,一个是navigationBar  管理的多个单视图控制器自带的view都添加到contenView上面导航控制器在完成页面之间的跳转的时候是一个不断地创建和销毁的过程
导航控制器 <wbr>UI_08(上)

 UINavigationController  在管理视图的时候用的栈的数据结构,进入下一界面入栈,此时要创建下一级页面视图;返回上一级界面就是出栈,此时会把当前视图界面销毁
======================================================
AppDelegate.m
    //创建单是图控制器FirstVC
   
FirstViewController *firstVC = [[FirstViewController alloc]init];
   
//创建导航控制器对象
   
UINavigationController *navigationVC = [[UINavigationController alloc]initWithRootViewController:firstVC];
    self.window.rootViewController = navigationVC;
    [firstVC retain];
    [navigationVC release];
——————————————————————————————
FirstViewController.m
 1.引入下一级的头文件
#import "SecondViewController.h"
补充内容:
- (void)viewWillAppear:(BOOL)animated{
   
NSLog(@"%s",__FUNCTION__);
}
- (void)viewDidAppear:(BOOL)animated{
   
NSLog(@"%s",__FUNCTION__);
}
- (void)viewWillDisappear:(BOOL)animated{
    NSLog(@"%s",__FUNCTION__);
}
- (void)viewDidDisappear:(BOOL)animated{
   
NSLog(@"%s",__FUNCTION__);
}
- (void)viewDidLoad {
    [super viewDidLoad];
    //制定背景颜色,消除跳转的重影现象
    self.view.backgroundColor = [UIColor whiteColor];
    UIButton *button1 = [UIButton buttonWithType:UIButtonTypeSystem];
    button1.
frame = CGRectMake(80, 100, 150, 40) ;
    [button1
setTitle:@"欢迎进入下一个页面" forState:UIControlStateNormal];
   
//添加关联事件
    [button1
addTarget:self action:@selector(handlePush : ) forControlEvents:(UIControlEventTouchUpInside)];
    button1.
backgroundColor = [UIColor greenColor];
    [self.view addSubview:button1];    
}
//配置导航条公共的属性,该属性作用于所有的界面
- (
void)configureCommonProerty{
   
//设置导航条的颜色
   
self.navigationController.navigationBar.barTintColor = [UIColor cyanColor];
   
   
//控制导航条的毛玻璃效果是否打开,影响的是contentView上视图的布局
   
self.navigationController.navigationBar.translucent = YES;
   
//设置导航条是否隐藏
   
self.navigationController.navigationBarHidden = NO;
   
//设置导航条内容颜色(标题,视图边框的颜色)
   
//设置导航条Back的颜色
   
self.navigationController.navigationBar.tintColor = [UIColor redColor];
   
//设置导航条的背景图片
   
//44的高时图片只能早导航条上
   
//64的高时,导航条和状态栏都有
   
//其他情况拉伸或者压缩

    [
self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"95"] forBarMetrics:UIBarMetricsDefault];
}
//针对于每个界面单独定制导航条上的内容
- (
void)customNavigationItemAppearance{
   
//1.配置导航条显示的标题
   
self.navigationItem.title = @"FirstVC";
   
//2.配置导航条的标题视图
   
UISegmentedControl *segmentView = [[UISegmentedControl alloc]initWithItems:@[@"所有通话",@"未接来电"]];
   
self.navigationItem.titleView = segmentView;
   
    [segmentView
release];
   
//3.0配置导航条的左右按钮
    //self 为试图控制器对象

    UIBarButtonItem *leftItem = [[UIBarButtonItem alloc]initWithTitle:@"添加" style:UIBarButtonItemStylePlain target:self action:@selector(handleLeftItem :)];
   
self.navigationItem.leftBarButtonItem = leftItem;
    [leftItem
release];
   
    UIBarButtonItem *rightItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemTrash target:self action:@selector(handleRight :)];

    self.navigationItem.rightBarButtonItem = rightItem;
    [rightItem release];
}
#pragma mark  实现左barButton的方法
- (void)handleLeftItem : (UIBarButtonItem *)leftItem{
   
NSLog(@"添加");
}
#pragma mark 实现右BarbuttonItem 的方法
- (void)handleRight : (UIBarButtonItem *)rightItem{
   
NSLog(@"垃圾桶");
}
- (void)handlePush :  (UIButton *)push{
//    NSLog(@"欢迎进入第一个页面");
   
//2.创建SecondViewController对象
   
SecondViewController *secondVC = [[SecondViewController alloc]init];
   
//3.获取导航视图控制器并完成跳转
//    self.navigationController  获取当前视图的导航控制器对象
   
//第一个参数:待跳转的试图控制器对象
  
// 第二个参数:是否需要动画
    [self.navigationController pushViewController:secondVC animated:YES];
    //释放
    [secondVC
release];
}
- (void)handlePush :  (UIButton *)push{
//    NSLog(@"欢迎进入第一个页面");
   
//2.创建SecondViewController对象
   
SecondViewController *secondVC = [[SecondViewController alloc]init];
   
//3.获取导航视图控制器并完成跳转
//    self.navigationController  获取当前视图的导航控制器对象
    //第一个参数:待跳转的试图控制器对象
   // 第二个参数:是否需要动画
    [self.navigationController pushViewController:secondVC animated:YES];
    //释放
    [secondVC release];
}
——————————————————————————————
SecondViewController.m
当界面切换的时候,来年各个视图A和视图B的消失的过程
 从A Push  B(从前到后)
 A(viewWillDisAppear:) -> B(viewWillAppear:) -> A(viewDidAppear:) -> B(viewDidAppear:)
 从B pop 到 A(从后到前)
  B(viewWillDisAppear:) -> A(viewWillAppear:) -> B(viewDidAppear:) -> A(viewDidAppear:)
视图将要出现的时候触发,此方法主要用来刷新UI界面
- (void)viewWillAppear:(BOOL)animated{
   
NSLog(@"%s",__FUNCTION__);
}
//视图已经出现的时候触发
- (
void)viewDidAppear:(BOOL)animated{
   
NSLog(@"%s",__FUNCTION__);
}
//视图将要消失的时候触发
- (
void)viewWillDisappear:(BOOL)animated{
   
NSLog(@"%s",__FUNCTION__);
}
//视图已经消失的时候触发
- (
void)viewDidDisappear:(BOOL)animated{
   
NSLog(@"%s",__FUNCTION__);
}

- (void)viewDidLoad {
    [super viewDidLoad];
    //制定背景颜色,消除跳转的重影现象
    self.view.backgroundColor = [UIColor whiteColor];
    UIButton *button1 = [UIButton buttonWithType:(UIButtonTypeSystem)];
    button1.
frame = CGRectMake(80, 100, 150, 40);
    [button1
setTitle:@"欢迎进入下一个页面" forState:UIControlStateNormal];
    button1.
backgroundColor = [UIColor yellowColor];
        [button1
addTarget:self action:@selector(handlePush : ) forControlEvents:(UIControlEventTouchUpInside)];
    [self.view addSubview:button1];
}
- (
void)handlePush : (UIButton *)push{
   
ThirdViewController *thirdVC = [[ThirdViewController alloc]init];
    [
self.navigationController pushViewController:thirdVC animated:YES];
    [thirdVC release];  
}
self.navigationItem.title = @"SecondVC";
第三个控制图省略和上面第三个一样。
——————————————————————————
ForthViewController.m//第四部分实行跳转pop或push
布局部分和第一、二、三个一致(在此省略)
- (void)handelePush : (UIButton *)push{
    1.返回上一级界面 也是有导航视图控制器完成
    [self.navigationController popViewControllerAnimated:YES];
导航控制器 <wbr>UI_08(上)


————————————————————————————————

    2.返回到导航控制器的根视图控制器对象
    [self.navigationController popToRootViewControllerAnimated:YES];
导航控制器 <wbr>UI_08(上)


——————————————————————————————————————
    3.返回到指定的视图控制器
    第一步获取导航视图控制器所有单视图控制器
    NSArray *controllerArray = [self.navigationController viewControllers];
    第二步返回到指定的视图控制器
    [self.navigationController popToViewController:controllerArray[1] animated:YES];    
}
导航控制器 <wbr>UI_08(上)

说明:

导航控制器是通过栈的形式来管理子控制器的(先进后出)

显示在导航控制器上得view永远是栈顶控制器的view

一个导航控制器只有一个导航条,也就是说所有的自控制器公用一个导航条。
======================================================
下接:
UIPassValue页面传值——UI-第八天(下):

欢迎学习本文,未经博主许可,禁止转载!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

韩俊强

奖励一杯咖啡☕️

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值