IOS--UI--LessonNavigationController

定义:
/*
1.UINavigationController 继承自 UIViewController 可以管理视图 (导航控制器)是 IOS 中提供的 用来管理多个视图控制器的控制器,被他管理的试图控制器必须要有层级关系(依赖关系,下一个视图出现必须依赖上一个出现过的视图)

2.要进入下一界面 先导入头文件 然后在创建下一个界面的视图控制器 push 进入
返回上一级界面 pop 返回

3.导航控制器以栈的形式管理多个视图控制器, push时 视图控制器入栈, pop 时 视图控制器出栈 (即 被销毁),屏幕上永远显示的是栈定元素
4.viewControllers 属性: 永远是获得当前

*/
准备 工作 修改根视图控制器 将导航控制器指定为根视图控制器

 //设置好一个视图 让导航控制器控制
  FirstViewController *firstVC = [[FirstViewController alloc]init];
    self.window .rootViewController = firstVC;

 //将导航控制器 指定为 window 的根视图控制器
    UINavigationController *rootNC = [[UINavigationController alloc]initWithRootViewController:firstVC];
//    2.设置window 的根视图控制器
    self.window .rootViewController = rootNC;
    [rootNC release];
    [firstVC release];




上面这些代码可以封装起来 下次使用的时候就会方便甚多 只要传值就够了

注:因为Navigation 是多视图控制器 我们至少建立两个以上的文件
1.导航功能的实现
建立 第一个视图 FirstViewController
.m 中 我们先建立一个简单的 Button 让他通过点击事件转入第二个界面即 SecondViewController

 FirstViewController.m
 注://为了让代码好看 我们不在- (void)viewDidLoad ;中写我们代码 写在外面 然后在这个代码进程中引入
 - (void)viewDidLoad {
    [super viewDidLoad];

    //加背景颜色 为了防止卡顿现象
    self.view.backgroundColor= [UIColor redColor];
    //要记得在里面调用
    [self layoutPushButton];
    [self configureCommonProperty];
    [self customNavicationBarConten];

}
// 点击进入下一界面 为了清晰明了 我们设方法名为 Push+xxx
 -(void)layoutPushButton{
    UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];
    button.frame = CGRectMake(50, 150, 220, 40);
    [button setTitle:@"下一步" forState:UIControlStateNormal];
    button.backgroundColor = [UIColor whiteColor];
    [button addTarget:self action:@selector(handlePush:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:button];

}
-(void)handlePush:(UIButton *)sender{
    //进入下一个视图的步骤
//    1.创建第二个视图 并引入 这个地方要在 F 的 点. m中引入第二个视图的头文件 
 //你想下一页显示谁 你就创建那个视图 导入头文件 在 controller 里面写谁
  SecondViewController *secondVC= [[SecondViewController alloc]init];
//    2.通过导航控制器进入下一个界面  
    //得到自身坐在的多视图控制器(UINavigationController)
    [self.navigationController pushViewController:secondVC  animated:YES];
    [secondVC release];
}

2.创建要进入的第二个界面 cmd+n

SecondViewController.m
- (void)viewDidLoad {
    [super viewDidLoad];
 //加背景颜色 为了防止卡顿现象
    self.view.backgroundColor = [UIColor yellowColor];
    [self layoutPushButton];
    [self layoutPopButton];

}
//进入下一个界面的 Button
-(void)layoutPushButton{
//1.创建对象
    UIButton *pushButton = [UIButton buttonWithType:UIButtonTypeSystem]; //2.设置属性
    pushButton.frame = CGRectMake(30, 150, 100, 30);
    [pushButton setTitle:@"NEXT" forState: UIControlStateNormal];
    pushButton.backgroundColor = [UIColor whiteColor];
//3.Push 的点击事件
    [pushButton addTarget:self action:@selector(handlePush:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:pushButton];


}
//点击事件的方法
-(void)handlePush:(UIButton *)sender{
 //进入下一个视图的步骤
//    1.创建第二个视图 并引入 这个地方要在 S 的. m中引入第三个视图的头文件 
    ThreeViewController *three = [[ThreeViewController alloc]init];
    //获得根视图控制器(导航控制器)
    [self.navigationController pushViewController:three animated:YES];
    [three release];
}

//如果你就想着两个 我们可以设一个返回上一界面的 button
-(void)layoutPopButton{
//创建对象
    UIButton *popButton = [UIButton buttonWithType:UIButtonTypeSystem];
    //配置属性
    popButton.frame = CGRectMake(150, 150, 100, 30);
    [popButton setTitle:@"back on" forState:UIControlStateNormal];
    //点击事件
    [popButton addTarget:self action:@selector(handlePop:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:popButton];
}

-(void)handlePop:(UIButton *)sender{
    //1.获得多视图控制器(导航控制器)     //返回上一级页面
    [self.navigationController popViewControllerAnimated:YES];
//    //2.返回主界面
   [self.navigationController popToRootViewControllerAnimated:YES];
//    //3.返回指定界面
 [self.navigationController popToViewController:self.navigationController.viewControllers[1] animated:YES];
}
//注意:新手錯誤 :新建自己想去的页面的对象 这时候你建立的就和之前堆栈里的不是一个地方 他们只是同一个类而已

导航总结:
/*
1.要在使用的视图中加上底色 防止卡顿
2.Push 是进入 pop 是返回
3.pop 的方法里面有三种返回到界面的方法 选择自己想要的就可以了
*/

2.UINavigationBar 的导航栏自定义
定义:和控制器一样是个容器 显示提供的其他对象的内容 通过 UINavigationItem 展示 每个 controller 都会有专属的 Item

设立公有的属性
// 在 APPDelegate 里面 设置的 bar 的颜色 就会应用于所有视图
    rootNC.navigationBar .tintColor = [UIColor cyanColor];
    //外观
    rootNC.navigationBar.barStyle = UIBarStyleBlack;
    //透明度
  rootNC.navigationBar.translucent = YES;
//添加图片  default 竖屏 lanxxx 是横屏
  rootNC.navigationBar setBackgroundImage:[UIImage imageNamed:图片名字] forBarMetrics:UIBarMetricsDefault];

2.1 UINavigationItem 是 Bar 要显示的内容, Bar 是唯一的,每一个 controller 都要设置
常用属性: leftBarButtonItem / rightBarButtonItem /backBarButtonItem /title /titleView;
注意 :①leftBarButtonItem 虽然能点击 不是 button
①backBarButtonItem 是上一级的UINavigationItem控制
苹果提供的解释图
在FirstViewController.m 中 设置 item

  //1.导航条上面的标题
    self.navigationItem.title = @"FirstVC";
     //3.配置左边内容 显示废纸篓按钮
//    3.1创建按钮
    UIBarButtonItem *leftItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemTrash target:self action:@selector(handleTrash:)];

//    //3.2 给 leftitem 赋值 创建属性
    self.navigationItem.leftBarButtonItem = leftItem;
         [leftItem release];
//    3.3 配置右边的内容 显示为+号
//    UIBarButtonItem *jiaItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(handleJia:)];
//    self.navigationItem. rightBarButtonItem = jiaItem;
//    [jiaItem release];
//   3.4配置右边内容 设置文字类型
    UIBarButtonItem *jiaItem = [[UIBarButtonItem alloc]initWithTitle:@"添加" style:UIBarButtonSystemItemDone  target:self action:@selector(handleJia:)];
        self.navigationItem. rightBarButtonItem = jiaItem;
        [jiaItem release];

 //3. 自定义的 titleview
    UIButton *button1 = [UIButton buttonWithType:UIButtonTypeContactAdd];
    self.navigationItem.titleView = button1;
    //3.1 书签形状的右边按钮
    UIBarButtonItem *item = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks target:self action:@selector(bookMark:)];
    self.navigationItem.rightBarButtonItem = item;
    [item release];
 // 还可以放数组 但是 item 就要加 s
  UIBarButtonItem *item = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks target:self action:@selector(bookMark:)];
    UIBarButtonItem *item1 = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks target:self action:@selector(bookMark:)];

    self.navigationItem.leftBarButtonItems = [NSArray arrayWithObjects:item,item1, nil];

导航栏总结:
/*
1.bar 下面有很多属性 要搞清楚他们的层级关系
2.bar 管理 item item 对应 controller
*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值