导航控制器 NavigationController_前进的火车_新浪博客

本文主要是介绍导航控制器 NavigationController_前进的火车_新浪博客,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

UINavigationController

1> 作用:

管理其他控制器的控制器,能够记录多个控制器层层推进的顺序,便于在实现多vc切换时,保证vc的顺序

2> 如何实现管理的vc的切换

[vc.navigationController   pushViewController:界面];


3>特点

导航控制器并且没有一个独立完整的用于显示的界面,依靠正在管理的普通的vc的view做为当前显示的界面.在屏幕顶端导航控制器自带一个导航条(Navigation Bar),在屏幕下方的导航控制器自带了一个工具条(Tool Bar)

4>配置导航条

访问整个导航条:  vc.navigationItem

,右: UIBarButtonItem对象

vc.navigationItem.leftBarButtonItem

vc.navigationItem.rightBarButtonItem

中: 文字或其他的控件

vc.navigationItem.title

vc.navigationItem.titleView 

5>配置工具条

位置:位于屏幕的底部,默认是隐藏的

配置如何显示

vc.navigationController.toolBarHidden = NO;

配置工具条中的内容

工具条中能够容纳的只能是UIBarButtonItem类型的按钮

vc.toolBarItems

特效按钮:

木棍和弹簧按钮,可以在toolBar中,调整按钮之间的间距,木棍(Fix)的特点是长度固定,弹簧(Flexiable)的特点是长度可以自适应

6>导航控制器的实现原理

导航控制器具有一个viewControllers的属性,是数组类型的,并且是以 “栈”特殊的存储方式管理数组中的元素

数组 — 下标 有序

字典 —  根据key找到value

“栈”—— 先进后出,后进先出

往 “栈”中存数据: 入栈 压栈  push

从 “栈”中取数据: 出栈 弹栈  pop

“队列”—— 先进先出,后进后出

  7> 导航控制器的属性的作用域范围

vc.navigationController.toolBarHidden 

vc.navigationController.navigationBarHidden 

以上两个用于设置显示隐藏的属性(可跨多个VC),作用域为多个vc,不管在哪个vc中,一旦修改了hidden属性,那么,就算是切换到其他的vc,修改过的hidden属性仍然生效

vc.navigationItem.left/right BarButtonItem

vc.navigationItem.title/view

vc.toolBarItems 

以上用于设置导航栏和工具栏内容的属性,作用域只在当前正在加载的vc中有效, 如果切换到另一个vc,那么在上一个vc中设置的这些内容就都不再生效

8>多导航控制器之前的切换

UINavigationController 继承自UIViewController,所以UIViewController可以present+dismiss(上下推),那么两个UINavigationController 之间 也可以 present+dismiss

什么时候需要在两个导航之间切换?

一个导航一般用于管理一套流程操作中的多个界面,整个应用,包含多套操作流程,所以,在一个应用中就会有多个导航存在,那么当需要从一个流程调到另个流程中时,就需要从一个导航调到另一个导航

[vc.navigationController presentViewController:otherNavi];

[vc.navigationController dismissViewController];

设置NavigationController

    UINavigationController *navController = [[UINavigationController alloc]initWithRootViewController:controller];

    navController.delegate = self;

   if ([navController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)])

    {

        [navController.navigationBar setBackgroundColor:[UIColor clearColor]];

//        [navController.navigationBar setBackgroundImage:[[UIImage imageWithColor:SHColor_navbkg size:CGSizeMake(ScreenWidth, 3)] stretchableImageWithLeftCapWidth:100.f topCapHeight:1] forBarMetrics:UIBarMetricsDefault];

    }

    //设置字体

   NSShadow * shadow = [[NSShadow alloc] init];

    [shadow setShadowColor: [UIColor colorWithWhite:1.0f alpha:1.f]];

    [shadow setShadowOffset: CGSizeMake(0.5f, 0.0f)];

    navController.navigationBar.tintColor = [UIColor whiteColor];

    [navController.navigationBar setTitleTextAttributes:

     @{ NSForegroundColorAttributeName: [UIColor whiteColor],

        NSFontAttributeName: [UIFont boldSystemFontOfSize:18.f],

        NSShadowAttributeName: shadow}];

    

   [[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(-1000, -100) forBarMetrics:UIBarMetricsDefault];




1.将导航控制器设置为window的根视图控制器

MyViewController *myVC = [[MyViewController alloc]init];

UINavigationController *navi = [[UINavigationController alloc]

  initWithRootViewController:myVC];    

self.window.rootViewController = navi; 

[self.window makeKeyAndVisible];

2.设置导航栏

1>设置导航栏是否隐藏

self.navigationController.navigationBarHidden=YES;(默认显示)

2>设置导航栏文字按钮

UIBarButtonItem *item1 = [[UIBarButtonItem alloc]initWithTitle:

  @"OK" style:UIBarButtonItemStylePlain target:self action:@selector(clickOK:)];

3>设置导航栏图片按钮

UIBarButtonItem *item2 = [[UIBarButtonItem alloc]initWithImage:

  [UIImage imageNamed:@"quan.png"] style:UIBarButtonItemStylePlain target:nil  

  action:nil]; 

4>配置了导航栏的右边按钮,按钮顺序从右往左排列

self.navigationItem.rightBarButtonItems = @[item1,item2]; 

5>配置导航栏的左按钮

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]

  initWithBarButtonSystemItem:UIBarButtonSystemItemCamera target:nil 

  action:nil]; 

6>创建导航条中间按钮【普通按钮】

UIButton *button = [[UIButton alloc]initWithFrame: CGRectMake(0, 0, 200, 40)];

//x和y设置多少都无效

.设置按钮名和插入图片

[button setTitle:@"选择分组" forState:UIControlStateNormal];

[button setImage:[UIImage imageNamed:@"arrow_down.png"] forState:

  UIControlStateNormal]; 

//若需按钮从normal切换为selected状态必须修改按钮的selected属性为YES [button setImage:[UIImage imageNamed:@"arrow_up.png"] forState:

  UIControlStateSelected];//button.selected属性的真假决定该句是否执行。

.设置导航中间按钮某种状态时文字颜色

[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 

[button setTitleColor:[UIColor redColor] forState:UIControlStateSelected];

.为按钮添加事件

[button addTarget:self action:@selector(clickTitleButton:) forControlEvents:

  UIControlEventTouchUpInside];

.按钮添加到视图titleView中

self.navigationItem.titleView = button; 

.在按钮的响应方法中实现按钮状态的切换

-(void)clickTitleButton:(UIButton *)btn{  

btn.selected = !btn.selected; //通过修改selected属性,实现按钮切换

}

3.设置工具条

1>设置工具条显示, (下界面需要隐藏时,需要在界面推出前修改设置)

self.navigationController.toolbarHidden = NO; //默认隐藏

[self.navigationController setNavigationBarHidden:NO];

2>创建工具条系统按钮

.创建播放器按钮

UIBarButtonItem *item3 = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:

 UIBarButtonSystemItemPlay target:nil action:nil];

 UIBarButtonSystemItemPlay //播放

 UIBarButtonSystemItemFastForward//快进

 UIBarButtonSystemItemRewind//快速倒回 

.创建木棍按钮

UIBarButtonItem *itemFix = [[UIBarButtonItem alloc]

 initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil  

 action:nil]; 

itemFix.width = 40; //设置木棍的宽度   

.创建弹簧按钮 

UIBarButtonItem *itemFlexible = [[UIBarButtonItem alloc]

 initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil  

 action:nil]; 

.工具条创建按钮的排列【从左往右】

self.toolbarItems =

  @[itemFix,item5,itemFlexible,item3,itemFlexible,item4,itemFix];    

4.导航控制器一旦推出新的界面,导航栏和工具栏的内要由该界面的控制器决定

5.推出新的界面后,导航栏自动有“返回”左按钮,可以自己重建“返回”左按钮覆盖系统,

6.在推出下一界面前作以下设置隐藏下部工具条Bar vc.hidesBottomBarWhenPushed = YES;//当推出vc时隐藏vc底部的各种Bar包括(ToolBar,TabBar),返回上一界面底部的Bar不受影响

self.navigationController.toolbarHidden = NO;//返回上一界面底部TooBar也被隐藏了【该属性可跨界面】


这篇关于导航控制器 NavigationController_前进的火车_新浪博客的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/543048

相关文章

小技巧绕过Sina Visitor System(新浪访客系统)

0x00 前言 一直以来,爬虫与反爬虫技术都时刻进行着博弈,而新浪微博作为一个数据大户更是在反爬虫上不遗余力。常规手段如验证码、封IP等等相信很多人都见识过…… 当然确实有需要的话可以通过新浪开放平台提供的API进行数据采集,但是普通开发者的权限比较低,限制也比较多。所以如果只是做一些简单的功能还是爬虫比较方便~ 应该是今年的早些时候,新浪引入了一个Sina Visitor Syst

jmeter之仅一次控制器

仅一次控制器作用: 不管线程组设置多少次循环,它下面的组件都只会执行一次 Tips:很多情况下需要登录才能访问其他接口,比如:商品列表、添加商品到购物车、购物车列表等,在多场景下,登录只需要1次,我们期望的是重复执行登陆后面的接口来做压测,这就和事务相关,例如 事务1: 登录—>添加购物车 事务2: 登录—>购物车列表 事务3: 登录—>商品列表—>添加购物车 … 一、仅一次控制器案例 在

搜狗浏览器打开CSDN博客排版错乱问题解决

之前发生过几次,不知道什么原因。 今天一直用着好好的,打开一个csdn连接,显示404,博文被删除了,于是就用百度快照打开试试,百度快照打开显示的排版很乱也没找到有用信息。 后面再浏览CSDN博客就排版错乱,显示一个大大二维码图片。 尝试删除IE缓存无效,使用谷歌浏览是好的。 基本锁定就是搜狗缓存导致的,于是找如何删除搜狗缓存   清除后恢复正常

为控制器的方法添加必要参数

前言:做这个系统时,要求每次调用接口时要传操作人、操作人电脑ip、菜单id,然后计入log。本来前端读取到然后加入请求头,后端写入log即可。但是老大要求后端也要把控必传参数,避免前端忘记。所以就写了这个。IOperationFilter 这个是百度知道的。主要用于在Swagger生成的API文档中动态地添加或修改操作(即API接口)的元数据。 用处:可以自动地为 Swagger/OpenAPI

828华为云征文|基于华为云Flexus云服务器X实例部搭建Halo博客平台

华为云征文|基于华为云Flexus云服务器X实例部搭建Halo博客平台 前言一、Flexus云服务器X实例介绍1.1 Flexus云服务器X实例简介1.2 Flexus云服务器X实例特点1.3 Flexus云服务器X实例使用场景 二、Halo介绍2.1 Halo 简介2.2 Halo 特点 三、本次实践介绍3.1 本次实践简介3.2 本次环境规划 四、购买华为云Flexus云服务器X实例4.

基于Spring Boot的火车订票管理系统

你好呀,我是计算机学姐码农小野!如果有相关需求,可以私信联系我。 开发语言:Java 数据库:MySQL 技术:JAVA语言 + Spring Boot框架 工具:IDEA/Eclipse、Navicat、Tomcat 系统展示 首页 管理员界面 用户购票 订单管理 摘要 随着网络技术的不断发展,火车订票管理系统逐渐由传统的线下操作转变为线上服

缓存的常见问题 以及解决博客文章

1.jedispool 连 redis 高并发卡死  (子非鱼yy) https://blog.csdn.net/ztx114/article/details/78291734 2. Redis安装及主从配置 https://blog.csdn.net/ztx114/article/details/78320193 3.Spring中使用RedisTemplate操作Redis(sprin

IBM Storwize V7000存储控制器故障节点报错574

背景:由于客户机房搬迁,需要下电迁移设备。该存储自2016年投入生产使用后,从未关过机,已正常运行七八年时间,期间只更换过硬盘,无其他硬件故障。 在GUI界面点击关闭系统后,大概等了40分钟,存储仍未关机,所有硬盘状态灯绿色常亮,面板无报错。到设备后面看控制器的状态,发现node2已经正常关机了,node1仍然在运行,又等了大概20分钟还没有关机,直接将电源线给拔掉了。 再次上电以后,发现

[置顶] IT牛人博客

团队技术博客 淘宝UED淘宝用户体验团队淘宝核心系统淘宝核心系统团队博客阿里巴巴数据库团队专注数据库管理开发运维淘宝通用产品专注JAVA技术淘宝QA致力于做测试的行业标准淘宝搜索技术关注技术 关注搜索量子恒道专注大数据统计百度搜索研发关注搜索相关技术EMC中国研究院关注于云计算和大数据贰号楼肆层阿里巴巴平台技术部阿里数据平台阿里巴巴数据平台百度技术分享交流百度的互联网技术编码者说腾讯滴技术团队腾

为什么你应该从现在开始就写博客---刘未鹏

(一)为什么你应该(从现在开始就)写博客 用一句话来说就是,写一个博客有很多好处,却没有任何明显的坏处。(阿灵顿的情况属于例外,而非常态,就像不能拿抽烟活到一百岁的英国老太太的个例来反驳抽烟对健康的极大损伤一样) 让我说得更明确一点:用博客的形式来记录下你有价值的思考,会带来很多好处,却没有任何明显的坏处。Note:碎碎念不算思考、心情琐记不算思考、唠唠叨叨也不算思考、没话找话也不算思考