UI第八天:UINavigationController、界⾯通信

原创 2015年11月19日 22:44:30
⼀、UINavigationController
UINavigationController:导航控制器,是iOS中最常⽤的多视图控制器 之⼀,它⽤来管理多个视图控制器。
导航控制器可以认为是管理控制器的控制器,主要管理有层级关系的 控制器。
创建
UINavigationController继承于UIViewController,以栈的⽅式管理所 控制的视图控制器,⾄少要有⼀个被管理的视图控制器,这个控制器 我们称作,导航控制器的根视图控制器。
任何继承⾃UIViewController的类(多态)都可以作为根控制器。
⼯作原理
UINavigationController通过栈的⽅式管理控制器的切换,控制⼊栈和出栈 来展⽰各个视图控制器。
UINavigationController的ContentView⾥始终显⽰栈顶控制器的view。
viewControllers属性存储了栈中的所有被管理的控制器
navigationController属性,⽗类中的属性,每个在栈中的控制器,都能通 过此属性,获取⾃⼰所在的UINavigationController对象。
⼊栈和出栈
pushViewController:animated //进⼊下⼀个视图控制器
popViewControllerAnimated: //返回上⼀个视图控制器
popToViewController:animated //返回到指定的视图控制器
popToRootViewControllerAnimated //返回到根视图控制器

常⽤属性
viewControllers //所有处于栈中的控制器
topViewController //位于栈顶的控制器
visibleViewController //当前正在显⽰的控制器
navigationBar //导航条

⼆、定制UINavigationBar
navigationBar—导航条,iOS7之后默认是透明的,iOS7之前默认是不 透明的。
navigationBar在透明情况,与contentView会重合⼀部分区域。
navigationBar在不透明情况,contentView跟在navigationBar的下⾯。
navigationBar竖屏下默认⾼度44,横屏下默认⾼度32.

管理UINavigationItem
UINavigationBar除了能定义⾃⾝的样式外,还管理⼀组 UINavigationItem。
与UINavigationController相似,UINavigationBar也是以栈的⽅式管 理⼀组UINavigationItem。提供push和pop操作item。
每个视图控制器都有⼀个navigationItem属性。navigationItem中设 置的左按钮、右按钮、标题等,会随着控制器的显⽰,也显⽰到 navigationBar上
UINavigationItem
UINavigationItem属于MVC中的M。封装了要显⽰在UINavigationBar上 的数据。
title //标题
titleView //标题视图
leftBarButtonItem //左按钮
rightBarButtonItem //右按钮


   
// 导航条 44
   
// 状态栏 20
   
//导航条高就是44 状态的背景 是导航条延伸过去的
   
   
// 设置导航条的背景颜色
   
// 设置背景图片
   
//横屏状态下导航条高32
   
   
// 1.图片高度<44 效果平铺
   
// 2.图片高度 = 44 只覆盖导航条
   
// 3.图片高度 >44<64 效果平铺
   
//4.图片高度 = 64 效果覆盖导航条和状态栏
//    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"32044"] forBarMetrics:UIBarMetricsDefault];
   
   
// 7.0以后导航条默认半透明的
   
// 起始点从屏幕左上角开始计数
   
// 关闭半透明
//    self.navigationController.navigationBar.translucent = NO;
   
   
//一般使用默认的半透明状态 不用考虑起始点
   
    //导航条上的按钮 使用UIBarButtonItem
// 设置页面导航栏 标题
  //  self.navigationItem.title = @"首页";
    // 在标题位置 设置一个视图
    UIView *title = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 150, 44    )];
   
    title.backgroundColor = [UIColor blueColor];
    self.navigationItem.titleView =title;
    [title release];
三、界⾯间通信
使⽤属性传值解决从前往后传值的问题
使⽤delegate解决从后往前传值的问题



总结
UINavigationController以栈的⽅式管理视图控制器。
通过push和pop 控制跳转 UINavigationBar管理⼀组UINavigationItem,UINavigationItem包含了 UIBarButtonItem。
使⽤属性传值解决从前往后传值的问题
使⽤delegate解决从后往前传值的问题
 //初始化 导航视图控制器
   
//初始化时 需要一个根控制器去管理
   
UINavigationController *navi = [[UINavigationController alloc]initWithRootViewController:rootVC];
   
   
//只要是uiview子类都可以设置为根视图控制器
    [
self.window setRootViewController:navi];
    [navi
release];
    [rootVC
release];
   
// 最轻量级 储存数据的类(数据持久化)
   
// 初始化方法
   
NSUserDefaults *user = [NSUserDefaults standardUserDefaults];
   
//储存数据(以键值对的形式储存数据)
    [user
setObject:@"wanglong" forKey:@"username"];
    [user
setObject:@"123456" forKey:@"password"];
   
//同步数据
    [user synchronize];
//跳转方法
   
//视图控制器中有一个导航控制器属性
   
//一旦这个视图控制器被导航控制器管理了
   
//那么视图控制器中的导航控制器属性就会有值
    //并且这个值就是管理他的导航控制器
 //从前往后传值用属性传值
   
//1.先获取要取的值
   
//2.在第二个页面 声明一个属性 这个属性用来接收传过来的值
    //从后往前传值用代理传值
版权声明:本文为博主原创文章,未经博主允许不得转载。

自定义UINavigationController导航栏背景

1。         [self.navigationBar setBackgroundImage:[UIImage imageNamed:@"navigation_bar_background"]...
  • daiyelang
  • daiyelang
  • 2014年11月10日 16:43
  • 11065

UINavigationController 改变返回按钮的标题

改变NavigationController的back button的标题  一般来说这个标题,是上个页面的title, 例如从A页面 push 进来一个B页面,A的title 为 ...
  • fanjunxi1990
  • fanjunxi1990
  • 2013年06月18日 18:00
  • 11761

第八讲 :UINavigationController、界⾯面通信

本讲内容 一、UINavigationController 二、定制UINavigationBa r三、界⾯面间通信 一、UINavigationControl...
  • qq_16706275
  • qq_16706275
  • 2014年12月02日 15:53
  • 736

第⼋八讲 :UINavigationController、界⾯面通信

1.属性传值: 一般用于上级页面传值到下级页面,属性声明在下级页面,用于接收上级传过来的值. 2.代理传值: 实质:通过协议方法中的实现值传递:如- (void)sendValue:(NSStr...
  • lp380490944
  • lp380490944
  • 2015年08月25日 21:11
  • 71

UINavigationController视图控制器切换(一)

视图切换在项目中应该很常用,那么UINavigationController下的视图切换该如何来做了 其实很简单 我们接着上节有关UINavigationController的工程在里面继续添加代...
  • lwjok2007
  • lwjok2007
  • 2015年09月10日 18:56
  • 1276

随意细解:UI -- UINavigationController、界面通信

UINavigationController导航控制器
  • M_MU_U
  • M_MU_U
  • 2015年11月21日 15:57
  • 266

swift详解之二十二-----------UINavigationController的基本用法和页面传值几种方式

UINavigatioUInController的基本用法和页面传值几种方式本文介绍UINavigationController基本用法,因为涉及多页面顺便介绍页面传值1、手写代码创建UINaviga...
  • u010586842
  • u010586842
  • 2015年09月03日 19:12
  • 4921

QT UI美化 布局

- 设置程序界面风格 在main函数中 QApplication::setStyle("windows"); QApplication::setStyle("windowsxp")...
  • bloong
  • bloong
  • 2015年06月02日 13:40
  • 1187

iOS开发之高级视图—— UINavigationController(一)简单导航功能实现

UINavigationController是IOS编程中比较常用的一种容器view controller,很多系统的控件以及很多有名的APP中(如qq,系统相册等)都有用到。         nav...
  • panjican
  • panjican
  • 2016年05月26日 14:13
  • 1450

Android UI用户界面开发辅助工具

最近试着真实滴折腾了几个简单的Android程序,对Android将程序中的UI界面布局(layout)描述与程序应用逻辑实现代码 (code)严格分开,并分别放在res和src目录中的方法大为赞赏!...
  • mixiu888
  • mixiu888
  • 2017年12月22日 09:46
  • 88
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UI第八天:UINavigationController、界⾯通信
举报原因:
原因补充:

(最多只允许输入30个字)