在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:方法

Objective-c代码  
  1. - (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
  2. {
  3. if ([[segue identifier] isEqualToString:@"ShowSightingsDetails"])
  4. {
  5. DetailViewController *detailViewController = [segue destinationViewController];
  6. detailViewController.sighting = [self.dataController objectInListAtIndex:[self.tableView indexPathForSelectedRow].row];
  7. }
  8. if ([[segue identifier] isEqualToString:@"ShowAddSightingView"])
  9. {
  10. AddSightingViewController *addSightingViewController = [[[segue destinationViewController] viewControllers] objectAtIndex:0];
  11. addSightingViewController.delegate = self;
  12. }
  13. }

这个实现方法代码是用来处理在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操作。这两个按钮操作的方法在主视图控制器中实现。

Objective-c代码  
  1. - (void)addSightingViewControllerDidCancel:(AddSightingViewController *)controller
  2. {
  3. [self dismissViewControllerAnimated:YES completion:NULL];
  4. }
  5. - (void)addSightingViewControllerDidFinish:(AddSightingViewController *)controller name:(NSString *)name location:(NSString *)location {
  6. if ([name length] || [location length]) {
  7. [self.dataController addBirdSightingWithName:name location:location];
  8. [[self tableView] reloadData];
  9. }
  10. [self dismissModalViewControllerAnimated:YES];
  11. }

在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 分析小结相关推荐

  1. php监听iframe加载完成,window_IE iframe的onload方法分析小结,判断iframe是否加载完成的完美 - phpStudy...

    IE iframe的onload方法分析小结 判断iframe是否加载完成的完美方法IE 支持 iframe 的 onload 事件,不过是隐形的,需要通过 attachEvent 来注册. 第二种方 ...

  2. gettimeofday() 和 clock_gettime()函数 分析小结

    在上一篇文章<struct timeval 和 struct timespec 应用小结>我们分析了与linux系统时间相关的结构体定义,在linux系统C编程中,获取系统时间的api函数 ...

  3. CSS 同级元素浮动分析小结

    float:left/right/none; 1.同级浮动 (1)使块级元素在同一行显示(所有要在同一行显示的都要加浮动) <div class="box1">box1 ...

  4. 文法分析小结:自底向上的分析方法和自顶向下的分析方法有哪些

    首先注意一点:无论是那种语法分析,语法都是从左至右的读入符号! 自底向上分析法,也称移进-归约分析法. 它的实现思想是对输入符号串自左向右进行扫描,并将输入符逐个移入一个后进先出栈中,边移入边分析,一 ...

  5. 网络安全漏洞分析小结

    (一) 前言 这里感谢师傅前面整理的通达OA一些版本的漏洞复现,这里从漏洞点出发,分析漏洞,从中学些一些师傅白盒挖掘漏洞的思路. ​ 安装包下载地址,可以通过枚举版本号下载对应的安装包: https: ...

  6. openmp官方源码_MNN推理过程源码分析笔记(一)主流程

    在正式开始推理代码分析之前, 回顾下 MNN整体结构 推理分为三个大部分 Engine Backends Runtime Optimize 那么问题来了,从哪里开始,怎么入手呢? 我的心得是源码分析不 ...

  7. Java Review - 线程池资源一直不被释放案例源码分析

    文章目录 概述 问题复现 源码分析 小结 概述 在日常开发中为了便于线程的有效复用,经常会用到线程池,然而使用完线程池后如果不调用shutdown关闭线程池,则会导致线程池资源一直不被释放. 下面通过 ...

  8. Apache ZooKeeper - 集群中 Leader 的作用_事务的请求处理与调度分析

    文章目录 事务性请求处理 Leader 事务处理分析 预处理阶段 事务处理阶段 事务执行阶段 响应阶段 源码分析 小结 Leader 服务器在 ZooKeeper 中的作主要是处理事务性的会话请求以及 ...

  9. UI2Code智能生成Flutter代码——版面分析篇

    开篇:   在<UI2CODE--整体设计>篇中,我们提到UI2CODE工程的第一步是版面分析,如果是白色的简单背景,我们可以像切西瓜一样,将图片信息切割为GUI元素.但是在实际生产过程中 ...

  10. 教你3个python「性能分析」工具,再也不用自己计算函数耗时了

    文章目录 引言 1. cProfile:最便捷的性能分析 保存性能数据 查看性能数据 查看耗时最多的子函数 查看特定名称函数的耗时 2. timeit:计算小代码片段的耗时 3. IDE中的性能分析 ...

最新文章

  1. python给一列数据增加前缀_python自制工具----给文件添加前后缀。
  2. 机器学习(MACHINE LEARNING)MATLAB非线性曲线拟合方法
  3. yii2使用 db log
  4. mysql时间字段条件查询_mysql 查询 时间作为查询条件
  5. 记:使用IScroll.js 开发picker日历组件遇到的问题及经验总结
  6. 苹果抛弃 OpenGL!
  7. python课程-天津Python编程课程
  8. php 学习编译扩展
  9. Hurdles of 110m ZOJ - 2972 (简单DP)
  10. join()方法与CSV格式文件
  11. 哈工大计算机科学与技术邬向前,人工智能学院组队赴哈工大交流学习
  12. python代码画微信标志图片_Python 一键制作微信好友图片墙
  13. 无缘蜂鸣器——stm32定时器PWM实现控制发出“哆瑞咪发…“七个音及简单音乐
  14. 树莓派仿真器R语言下载
  15. Uiautomator2 GitHub文档转载
  16. 梦幻西游python验证成语_python正则表达式抓取成语网站
  17. 量子竞赛下一步:在应用中体现量子优势
  18. 虚拟机CentOS7启动报错:Entering emergency mode
  19. TSCA你了解多少?什么产品需要做TSCA认证
  20. Threejs围墙动画

热门文章

  1. 图片复印如何去除黑底_如何去除扫描件的底色? 扫描的图片去除背面的阴影的方法...
  2. QT学习笔记(十五):QLabel的点击事件(clicked)添加
  3. 微信公众号发布图文消息次数达到上限
  4. SPSS做Shapiro-Wilk正态分析
  5. 修改 linux ftp端口,如何修改ftp默认端口
  6. mma7660.c的改进
  7. 数据库中的基本数据结构
  8. 流量变现|谁能拒绝私藏一套app流量变现的攻略呢?
  9. 分屏 投影显示 PPT
  10. 操作系统进程调度实验