iOS开发 — (UINaVigationController)导航控制器,界面传值
UINavigationController 继承于 UIViewController , 以栈的方式管理所 控制的视图控制器 。
至少要有一个被管理的视图控制器 ,这个控制器我们称作导航控制器的根视图控制器 。
不论什么继承自 UIViewController 的类(多态)都能够作为根控制器。
一: 工作原理:
UINavigationController 通过 栈 的⽅式管理控制器的切换, 控制⼊栈和出栈 来展⽰示各个视图控制器 。
UINavigationController 的 ContentView ⾥里始终显⽰栈顶 控制器的 view 。
viewControllers 属性存储了栈中的全部被管理的控制器 navigationController 属性 ,父类中的属性, 每一个在栈中的控制器 ,都能通过此属性,获取⾃己所在的 UINavigationController 对象
经常使用属性
viewControllers // 全部处于栈中的控制器
topViewController // 位于栈顶的控制器
visibleViewController // 当前正在显⽰示的控制器
navigationBar // 导航条
navigationBar 是导航条。 iOS7 之后默认是透明的, iOS7 之前默认是不透明 的。
navigationBar 在透明情况,与 contentView 会重合⼀部分区域。
navigationBar 在不透明情况, contentView 跟在 navigationBar 的下⾯。
navigationBar 竖屏下默认⾼高度 44 ,横屏下默认⾼度 32
二:<代码展示>
1:设置根视图控制器
"AppDelegate.m"
//1:创建firstVC
FirstViewController *firstVC = [[FirstViewController alloc]init];
//2.创建导航视图控制器对象 naVC
UINavigationController *naVC = [[UINavigationController alloc]initWithRootViewController:firstVC];
//3.将导航视图控制器对象 naVC 指定为window根视图控制器
self.window.rootViewController = naVC;
//4.释放全部权
[naVC release];
[firstVC release];
在这个文件中能够定制 navigationBar
//1.设置barTincolor
// naVC.navigationBar.barTintColor = [UIColor cyanColor];
//关闭半透明
naVC.navigationBar.translucent = NO;
//2.设置tinColor
// naVC.navigationBar.tintColor = [UIColor yellowColor];
//3.设置风格 默认是0 白色 1是黑色
naVC.navigationBar.barStyle = 1;
//4.设置背景图片
//当我们navigation设置图片的时候 navigation不再透明
//图片尺寸:
//当小于44或者大于64时候 图片会在navigationBar和satusBar上产生平铺的效果
//当尺寸正好等于44时候 图片仅仅会位navigationBar附上图片
//当尺寸正好等于64时候,图片会为navigationBar以及statusBar同一时候附上图片;
[naVC.navigationBar setBackgroundImage:[UIImage imageNamed:@"32074.png"] forBarMetrics:UIBarMetricsDefault];
//隐藏navigationBar(导航栏)和StatusBar(状态栏)
naVC.navigationBarHidden = NO;
在根视图控制器
1:设置导航栏标题
self.navigationItem.title = @"first";
或者
self.title = @"First(主页)";
2:设置右边的Barbutton
//方法一 使用的系统的图标
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemPlay target:self action:@selector(nextAction:)];
//方法二 通过View自己定义创建
//创建button
UIButton *BT = [UIButton buttonWithType:UIButtonTypeSystem];
[BT setTitle:@"下一页" forState:UIControlStateNormal];
[BT addTarget:self action:@selector(nextAction:) forControlEvents:UIControlEventTouchUpInside];
BT.frame = CGRectMake(0, 0, 60, 50);
//通过button 创建barButtonItem
UIBarButtonItem *rightItem = [[UIBarButtonItem alloc]initWithCustomView:BT];
//给rightBatButtonItem赋值
self.navigationItem.rightBarButtonItem = rightItem;
//释放全部权
[rightItem release];
3:设置左边的返回按钮 一般使用系统的图标
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemReply target:self action:@selector(LastAction:)];
pushViewController:animated // 进⼊入下⼀个视图控制器
popViewControllerAnimated : // 返回上⼀个视图控制器
popToViewController:animated // 返回到指定的视图控制器
popToRootViewControllerAnimated // 返回到根视图控制器
4:触发事件 从根视图推到下一视图push
-(void)nextAction:(UIBarButtonItem *)Bt
{
//创建下一个视图控制器对象
SecondViewController *secondVC = [[SecondViewController alloc]init];
//2. 通过导航视图控制器 push操作
[self.navigationController pushViewController:secondVC animated:YES];
[secondVC release];
}
5:从下一视图返回根视图pop
-(void)LastAction:(UIBarButtonItem *)BT{
[self.navigationController popViewControllerAnimated:YES];
}
注:UIBarButtonItem 属于 MVC 的 M 。定义了 UINavigationItem 上按钮的触 发事件。外观等
initWithBarButtonSystemItem:target:action:
-initWithTitle:style:target:action:
-initWithImage:style:target:action:
界面传值
场景1 : 从前往后传值 First(根视图) –> Second(第二个视图)
方法: 属性传值
步骤:1.在Second中声明对于类型的属性
@property (nonatomic,copy)NSString *tfStr; //用来接收 字符串
2.在First中push的方法中 将值传给Second的属性
secondVC.tfStr = _tf.text;
3.在Second中 使用属性进行操作
_tf.text = _tfStr; //接收来自第一个视图的textFiled的值
场景2 : 从后往前传值 Second(第二个视图) –> First(根视图)
方法 :代理传值
步骤: 1.在Second中声明协议 声明代理
@protocol SecondViewControllerDelegate <NSObject>
- (void)secondViewControllerDidDisAppearWithString:(NSString *)string; // 通知 第一个界面 运行方法 将字符串拿走
@end
@property (nonatomic,assign)id<SecondViewControllerDelegate>delegate; //声明协议的代理
2.在Second将要消失的时候 通知代理运行协议中的方法 将相应的值拿走
-(void)viewDidDisappear:(BOOL)animated{
[super viewDidDisappear:animated];
//通知代理运行协议中的方法 把tf上的字符串拿走
[_delegate secondViewControllerDidDisAppearWithString:_tf.text];
}
3.在First中 找到Second对象 并把First设置为Second
这里写代码片
….
secondVC.delegate = self; //设置代理
4.在First中 实现协议中的方法 获取相应的值
实现协议中的方法
-(void)secondViewControllerDidDisAppearWithString:(NSString *)string{
//通过传过来的參数 string 给textFiled 赋值
_tf.text = string;
}
iOS开发 — (UINaVigationController)导航控制器,界面传值的更多相关文章
- iOS开发UINavigation——导航控制器UINavigationController
iOS开发UINavigation系列一——导航栏UINavigtionBar摘要iOS中的导航条可以附着于导航控制器之中使用,也可以在controller中单独使用,这篇博客,主要讨论有关导航栏的使 ...
- iOS开发-21UINavigationController导航控制器初始化 导航控制器栈的push和pop跳转理解
(1)导航控制器初始化的时候一般都有一个根视图控制器,导航控制器相当于一个栈,里面装的是视图控制器,最先进去的在最下面,最后进去的在最上面.在最上面的那个视图控制器的视图就是这个导航控制器对外展示的界 ...
- 新手介绍简单一下iOS开发中几种界面传值
首先在处理iOS-UI中,也许在很多地方需要用到两种甚至多种不同界面之间的传值,相比这也是很多iOS入门成员头疼问题,同样作为新手的我在接触这类传值时候也一脸懵然,经过一段时间的研究,对于简单的传值有 ...
- iOS开发UI篇—控制器的创建
iOS开发UI篇—控制器的创建 说明:控制器有三种创建方式,下面一一进行说明. 一.第一种创建方式(使用代码直接创建) 1.创建一个空的IOS项目. 2.为项目添加一个控制器类. 3.直接在代理方法中 ...
- UINavigationController导航控制器
UINavigationController导航控制器,是多个界面间跳转的重要元素,可以理解为它存储着多个viewController,它的存储结构是栈,栈的特点是先进后出,所以添加视图控制器时,要特 ...
- iOS开发中视图控制器ViewControllers之间的数据传递
iOS开发中视图控制器ViewControllers之间的数据传递 这里我们用一个demo来说明ios是如何在视图控制器之间传递重要的参数的.本文先从手写UI来讨论,在下一篇文章中讨论在storybo ...
- iOS开发UI篇—控制器的View的创建
iOS开发UI篇—控制器的View的创建 一.6种创建控制器View的方式 #import "NJAppDelegate.h" #import "NJViewContro ...
- UINavigationController 导航控制器 ,根据文档写的一些东西
今天讲了导航控制器UINavigationController 和标签栏视图控制器UITabBarController 先来说一说导航视图控制器 UINavigationController 导航控 ...
- 【iOS开发-21】UINavigationController导航控制器初始化,导航控制器栈的push和pop跳转理解
(1)导航控制器初始化的时候一般都有一个根视图控制器,导航控制器相当于一个栈,里面装的是视图控制器,最先进去的在最以下,最后进去的在最上面.在最上面的那个视图控制器的视图就是这个导航控制器对外展示的界 ...
随机推荐
- python学习-- Django model -class 主键自增问题
转自:http://blog.csdn.net/mapoor/article/details/8609660 prize_id = models.IntegerField(primary_key=Tr ...
- GloVe词分布式表示
GloVe 模型介绍 下面的内容主要来自https://blog.csdn.net/u014665013/article/details/79642083 GloVe的推导 GloVe是基于共现信息来 ...
- TensorFlow——零碎语法知识点
张量(tensor) 张量 是图中计算节点的运算结果的引用,由name,shape,type三个属性构成. 张量的命名 可以以“name:src_output”的形式给出,node为计算节点名称,sr ...
- RHEL 7.3修改网卡命名规则为ethX
RHEL 7网卡默认命名规则:以太网卡(Ethernet)为enX,无线网卡(WLAN)为wlX,修改网卡命名规则为ethX如下: 1.修改/etc/sysconfig/grub文件,添加net.if ...
- Static相关
[理解] 说到static,脑中浮现的几个Key Words是什么? main 类 唯一空间 所有对象共享 static只能处理static 很好,解释一下上面的意思: main static fie ...
- 事件获取目标 currentTarget target srcElement三者之间的区别和联系
currentTarget 指的是触发事件的当前对象,可以是冒泡和捕获的对象,不一定是点击或者鼠标移入等事件的直接触发对象.可以是他的父元素等. target 指的是事件触发的直接对象.IE有兼容 ...
- 配置vscode使它能够在自定义扩展名当中支持emment语法
在.vue文件当中默认是不支持emment的,需要在vscode设置当中设置 "emmet.syntaxProfiles": { "vue-html": &qu ...
- SpringBoot基础之MockMvc单元测试
SpringBoot创建的Maven项目中,会默认添加spring-boot-starter-test依赖.在<5分钟快速上手SpringBoot>中编写的单元测试使用了MockMvc.本 ...
- 常用的XMPP服务器
1. Openfire (Wildfire) 3.x 底层通讯采用的mina框架,minak框架其实性能一般,netty早已经超越它,虽然最初都是Doug Lea写的.3.4版本之后支持集群,单台服务 ...
- AForge.NET 设置摄像头分辨率
AForge.NET 老版本在预览摄像头时可通过设置DesiredFrameSize 属性,设置摄像头支持的分辨率,新版本提示已过期: 解决办法: 获取VideoCapabilities属性集合,选中 ...