segue 分析小结
在iOS开发中,segue用来实现storyboard中源视图控制器和目标视图控制器连接,当segue被触发时,系统将完成下列操作:
1、实例化目标视图控制器
2、实例化一个新segue对象,该对象持有所有的信息
3、调用源视图控制器的prepareForSegue:sender:方法,
4、调用segue的 perform 方法将目标控制器带到屏幕上。这个动作行为依赖segue的类型如modal,push,custom.modal segue告诉源视图控制器present目标视图控制器。
在源视图控制器的prepareForSegue:sender:的方法中,执行任何必要的目标视图控制器的属性配置,包括委托设置(如目标视图控制器有协议)。
原文链接: http://mikixiyou.iteye.com/blog/1745995 )
在apple的文档库中第二个示例应用开发文档中,介绍了这样一个segue的使用例子。
在源视图控制器实现代码中,实现prepareForSegue:sender:方法
- - (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
- {
- if ([[segue identifier] isEqualToString:@"ShowSightingsDetails"])
- {
- DetailViewController *detailViewController = [segue destinationViewController];
- detailViewController.sighting = [self.dataController objectInListAtIndex:[self.tableView indexPathForSelectedRow].row];
- }
- if ([[segue identifier] isEqualToString:@"ShowAddSightingView"])
- {
- AddSightingViewController *addSightingViewController = [[[segue destinationViewController] viewControllers] objectAtIndex:0];
- addSightingViewController.delegate = self;
- }
- }
这个实现方法代码是用来处理在storyboard中配置的从主视图控制器到不同的两个视图控制器的segue。这两个segue通过它们的identifier属性进行判断。
在identifier为"ShowSightingsDetails"的segue中,目标视图控制器是一个展示明细信息的视图控制器,使用的segue类型为push。这种通常用于navigator视图控制器中。
当用户选择表视图中的一行时,segue发生。传输数据到目标视图控制器,使目标控制器上能显示sighting。
在identifier为"ShowAddSightingView"的segue中,目标视图控制器管理的是一个增加新的sighting信息的视图,我们称之为add视图控制器。它是不需要从主视图控制器(源)传什么数据过来的。但是,主视图控制器需要获取在add视图控制器(目标)上输入的数据。
实现方式是采用delegate,将主视图控制器设置为add视图控制器(目标)的委托。在目标视图控制器上执行它的委托中方法,该方法需要先在主视图控制器的实现代码中实现,方法包括如何读取add视图控制器的数据,并dismiss掉add视图控制器。
在add视图控制器上,有两个按钮,用于执行cancel和done操作。这两个按钮操作的方法在主视图控制器中实现。
- - (void)addSightingViewControllerDidCancel:(AddSightingViewController *)controller
- {
- [self dismissViewControllerAnimated:YES completion:NULL];
- }
- - (void)addSightingViewControllerDidFinish:(AddSightingViewController *)controller name:(NSString *)name location:(NSString *)location {
- if ([name length] || [location length]) {
- [self.dataController addBirdSightingWithName:name location:location];
- [[self tableView] reloadData];
- }
- [self dismissModalViewControllerAnimated:YES];
- }
在add视图控制器实现代码中,调用它的委托中这两个方法。
在storyboard中segue有三种类型,分别为modal segue、push segue、custom segue。
modal segue
是一个视图控制器(源)为了完成一个任务而模态地(modally)呈现另一个视图控制器(目标)。这个目标视图控制器不是导航视图控制器(navigation view controller)的栈中的一部分。
在任务完成后,使用delegate将呈现的视图控制器(目标)释放掉,应用界面切换到原来的视图控制器(源)上。
这个过程的实现代码可以看成是present和dismiss两个操作。
push segue
是将另一个视图控制器压入到导航控制器的栈中。它通常和导航视图控制器(navigation view controller)一起使用。
新压入的视图控制器会有一个回退按钮,可以退回来上一层。
这个过程的实现代码可以看成是push和pop两个操作。
segue 分析小结相关推荐
- php监听iframe加载完成,window_IE iframe的onload方法分析小结,判断iframe是否加载完成的完美 - phpStudy...
IE iframe的onload方法分析小结 判断iframe是否加载完成的完美方法IE 支持 iframe 的 onload 事件,不过是隐形的,需要通过 attachEvent 来注册. 第二种方 ...
- gettimeofday() 和 clock_gettime()函数 分析小结
在上一篇文章<struct timeval 和 struct timespec 应用小结>我们分析了与linux系统时间相关的结构体定义,在linux系统C编程中,获取系统时间的api函数 ...
- CSS 同级元素浮动分析小结
float:left/right/none; 1.同级浮动 (1)使块级元素在同一行显示(所有要在同一行显示的都要加浮动) <div class="box1">box1 ...
- 文法分析小结:自底向上的分析方法和自顶向下的分析方法有哪些
首先注意一点:无论是那种语法分析,语法都是从左至右的读入符号! 自底向上分析法,也称移进-归约分析法. 它的实现思想是对输入符号串自左向右进行扫描,并将输入符逐个移入一个后进先出栈中,边移入边分析,一 ...
- 网络安全漏洞分析小结
(一) 前言 这里感谢师傅前面整理的通达OA一些版本的漏洞复现,这里从漏洞点出发,分析漏洞,从中学些一些师傅白盒挖掘漏洞的思路. 安装包下载地址,可以通过枚举版本号下载对应的安装包: https: ...
- openmp官方源码_MNN推理过程源码分析笔记(一)主流程
在正式开始推理代码分析之前, 回顾下 MNN整体结构 推理分为三个大部分 Engine Backends Runtime Optimize 那么问题来了,从哪里开始,怎么入手呢? 我的心得是源码分析不 ...
- Java Review - 线程池资源一直不被释放案例源码分析
文章目录 概述 问题复现 源码分析 小结 概述 在日常开发中为了便于线程的有效复用,经常会用到线程池,然而使用完线程池后如果不调用shutdown关闭线程池,则会导致线程池资源一直不被释放. 下面通过 ...
- Apache ZooKeeper - 集群中 Leader 的作用_事务的请求处理与调度分析
文章目录 事务性请求处理 Leader 事务处理分析 预处理阶段 事务处理阶段 事务执行阶段 响应阶段 源码分析 小结 Leader 服务器在 ZooKeeper 中的作主要是处理事务性的会话请求以及 ...
- UI2Code智能生成Flutter代码——版面分析篇
开篇: 在<UI2CODE--整体设计>篇中,我们提到UI2CODE工程的第一步是版面分析,如果是白色的简单背景,我们可以像切西瓜一样,将图片信息切割为GUI元素.但是在实际生产过程中 ...
- 教你3个python「性能分析」工具,再也不用自己计算函数耗时了
文章目录 引言 1. cProfile:最便捷的性能分析 保存性能数据 查看性能数据 查看耗时最多的子函数 查看特定名称函数的耗时 2. timeit:计算小代码片段的耗时 3. IDE中的性能分析 ...
最新文章
- python给一列数据增加前缀_python自制工具----给文件添加前后缀。
- 机器学习(MACHINE LEARNING)MATLAB非线性曲线拟合方法
- yii2使用 db log
- mysql时间字段条件查询_mysql 查询 时间作为查询条件
- 记:使用IScroll.js 开发picker日历组件遇到的问题及经验总结
- 苹果抛弃 OpenGL!
- python课程-天津Python编程课程
- php 学习编译扩展
- Hurdles of 110m ZOJ - 2972 (简单DP)
- join()方法与CSV格式文件
- 哈工大计算机科学与技术邬向前,人工智能学院组队赴哈工大交流学习
- python代码画微信标志图片_Python 一键制作微信好友图片墙
- 无缘蜂鸣器——stm32定时器PWM实现控制发出“哆瑞咪发…“七个音及简单音乐
- 树莓派仿真器R语言下载
- Uiautomator2 GitHub文档转载
- 梦幻西游python验证成语_python正则表达式抓取成语网站
- 量子竞赛下一步:在应用中体现量子优势
- 虚拟机CentOS7启动报错:Entering emergency mode
- TSCA你了解多少?什么产品需要做TSCA认证
- Threejs围墙动画