<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont

简介: 主要内容:UINavigationController重要:属性传值(向后一个界面传值)、代理传值(向前相邻的界面传值)、单例传值(不相邻的界面向前传值)1、UINavigationController...
主要内容: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-第八天(下):

欢迎学习本文,未经博主许可,禁止转载!
目录
相关文章
|
Web App开发 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
Every Programmer Should Know These Latency Numbers 1秒=1000毫秒(ms) 1秒=1,000,000 微秒(μs) 1秒=1,000,000,000 纳秒(ns) 1秒=1,000,000,000,000 皮秒(ps) L1 cache reference .
618 0
|
6天前
|
NoSQL Cloud Native Redis
Redis核心开发者的新征程:阿里云与Valkey社区的技术融合与创新
阿里云瑶池数据库团队后续将持续参与Valkey社区,如过往在Redis社区一样耕耘,为开源社区作出持续贡献。
Redis核心开发者的新征程:阿里云与Valkey社区的技术融合与创新
|
5天前
|
关系型数据库 分布式数据库 数据库
PolarDB闪电助攻,《香肠派对》百亿好友关系实现毫秒级查询
PolarDB分布式版助力《香肠派对》实现百亿好友关系20万QPS的毫秒级查询。
PolarDB闪电助攻,《香肠派对》百亿好友关系实现毫秒级查询
|
7天前
|
消息中间件 Cloud Native Serverless
RocketMQ 事件驱动:云时代的事件驱动有啥不同?
本文深入探讨了云时代 EDA 的新内涵及它在云时代再次流行的主要驱动力,包括技术驱动力和商业驱动力,随后重点介绍了 RocketMQ 5.0 推出的子产品 EventBridge,并通过几个云时代事件驱动的典型案例,进一步叙述了云时代事件驱动的常见场景和最佳实践。
115028 1
|
8天前
|
弹性计算 安全 API
访问控制(RAM)|云上安全使用AccessKey的最佳实践
集中管控AK/SK的生命周期,可以极大降低AK/SK管理和使用成本,同时通过加密和轮转的方式,保证AK/SK的安全使用,本次分享为您介绍产品原理,以及具体的使用步骤。
101800 1
|
7天前
|
自然语言处理 Cloud Native Serverless
通义灵码牵手阿里云函数计算 FC ,打造智能编码新体验
近日,通义灵码正式进驻函数计算 FC WebIDE,让使用函数计算产品的开发者在其熟悉的云端集成开发环境中,无需再次登录即可使用通义灵码的智能编程能力,实现开发效率与代码质量的双重提升。
95382 2
Doodle Jump — 使用Flutter&Flame开发游戏真不错!
用Flutter&Flame开发游戏是一种什么体验?最近网上冲浪的时候,我偶然发现了一个国外的游戏网站,类似于国内的4399。在浏览时,我遇到了一款经典的小游戏:Doodle Jump...
112727 12
|
11天前
|
SQL 存储 JSON
Flink+Paimon+Hologres 构建实时湖仓数据分析
本文整理自阿里云高级专家喻良,在 Flink Forward Asia 2023 主会场的分享。
71310 1
Flink+Paimon+Hologres 构建实时湖仓数据分析
|
15天前
|
弹性计算 运维 安全
访问控制(RAM)|云上程序使用临时凭证的最佳实践
STS临时访问凭证是阿里云提供的一种临时访问权限管理服务,通过STS获取可以自定义时效和访问权限的临时身份凭证,减少长期访问密钥(AccessKey)泄露的风险。本文将为您介绍产品原理,以及具体的使用步骤。
151041 4
|
14天前
|
监控 负载均衡 Java
深入探究Java微服务架构:Spring Cloud概论
**摘要:** 本文深入探讨了Java微服务架构中的Spring Cloud,解释了微服务架构如何解决传统单体架构的局限性,如松耦合、独立部署、可伸缩性和容错性。Spring Cloud作为一个基于Spring Boot的开源框架,提供了服务注册与发现、负载均衡、断路器、配置中心、API网关等组件,简化了微服务的开发、部署和管理。文章详细介绍了Spring Cloud的核心模块,如Eureka、Ribbon、Hystrix、Config、Zuul和Sleuth,并通过一个电商微服务系统的实战案例展示了如何使用Spring Cloud构建微服务应用。
103517 9