一、什么是segue

Storyboard上每一根用来界面跳转的线,都是一个UIStoryboardSegue对象(简称Segue)
      
二、Segue的属性
  • 每一个segue对象,都有三个属性

  <1>唯一标识符

  @property (nonatomic, readonly) NSString *identifier;

  <2>来源控制器

  @property (nonatomic, readonly) id sourceViewController;

  <3>目标控制器

  @property (nonatomic, readonly) id destinationViewController;

    

三、Segue的类型

  根据segue的执行(跳转)时刻,Segue可以分为2大类型

  • 自动型:点击某个控件后(比如按钮),自动执行Segue,自动完成跳转

  

  • 手动型:需要通过写代码手动执行Segue,才能完成界面跳转

  

  在恰当的时刻,使用perform方法执行对应的Segue

  // Segue必须由来源控制器来执行,也就是说,这个perform方法必须由来源控制器来调用

  [self performSegueWithIdentifier:@"login2contacts" sender:nil];

四、performSegueWithIdentifier:sender:方法的完整执行过程

// 这个self是来源控制器

[self performSegueWithIdentifier:@"login2contacts" sender:nil];

<1>根据identifier去storyboard中找到对应的线,新建UIStoryboardSegue对象

  <1.1>设置Segue对象的sourceViewController(来源控制器)

  <1.2>新建并且设置Segue对象的destinationViewController(目标控制器)

<2>调用sourceViewController的线面方法,做一些跳转前的准备工作并且传入创建好的Segue对象

  - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender;

  // 这个sender是当初performSegueWithIdentifier:sender:中传入的sender

<3>调用Segue对象的- (void)perform;方法开始执行界面跳转操作

  <3.1>如果Segue的style是push

  • 取得sourceViewController所在的UINavigationController
  • 调用UINavigationController的push方法将destinationViewController压入栈中,完成跳转

  <3.2>如果Segue的style是modal

  • 调用sourceViewController的presentViewController方法将destinationViewController展示出来

<4>Sender参数的传递

五、控制器的数据传递--控制器之间的数据传递主要有2种情况:顺传和逆传

  <1>顺传

  • 控制器的跳转方向: A →
    C
  • 数据传递方向:A →
    C
  • 数据的传递方式:在A的prepareForSegue:sender:方法中根据Segue参数取得destinationViewController,也就是控制器C,直接给控制器C传递参数(要在C的viewDidLoad方法中取得数据,来赋值给界面上的UI控件)

  • 示例代码:

  <逆传>

  • 控制器的跳转方向:A →
    C
  • 数据的传递方向:C →
    A
  • 数据的传递方式:让A成为C的代理,在C中调用A的代理方法,通过代理方法的参数传递数据给A

  • 代码示例

  • 控制器C中:

  • 控制器A中:

iOS边练边学--通讯录练习之Segue使用,控制器的数据传递的更多相关文章

  1. iOS边练边学--Http网络再学习,简单介绍

    一.URL 什么是URL URL中常见的协议 二.Http Http的基本通信过程 发送Http请求的方法 GET 和 POST 对比 GET 和 POST 的选择 三.iOS中的Http学习 iOS ...

  2. iOS边练边学--多线程介绍、NSThread的简单实用、线程安全以及线程之间的通信

    一.iOS中的多线程 多线程的原理(之前多线程这块没好好学,之前对多线程的理解也是错误的,这里更正,好好学习这块) iOS中多线程的实现方案有以下几种 二.NSThread线程类的简单实用(直接上代码 ...

  3. iOS边练边学--CALayer,非根层隐式动画,钟表练习

    一.CALayer UIView之所以能显示在屏幕上,完全是因为他内部的一个图层 在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性 ...

  4. iOS边练边学--UIGestureRecognizer手势识别器简单介绍

    iOS 3.2之后,苹果退出了手势识别功能(Gesture Recognizer),在触摸事件处理方面,大大简化了开发者的开发难度. 一.UIGestureRecognizer UIGestureRe ...

  5. iOS边练边学--触摸事件以及能够拖拽的UIView的练习

    一.用户在使用APP的过程中,会产生各种各样的事件.iOS中的事件可以分为3大类型: 二.响应者对象 在iOS中只有继承了了UIResponder的对象才能接受并处理事件,这样的对象称之为“响应者对象 ...

  6. iOS边练边学--应用数据存储的常用方式(plist,Preference,NSKeyedArchiver)其中的三种

    iOS应用数据存储的常用方式: XML属性列表(plist)归档 Preference(偏好设置) NSKeyedArchiver归档(NSCoding) SQLite3--这里暂且不讲 Core D ...

  7. iOS边练边学--Segue数据逆传(用block代替delegate)

    一.block与方法的异同点: 相同点是都是保存代码段,什么时候执行,什么时候调用 不同点是block不受类或者对象的约束:方法收到了类或者对象的约束 二.思路:(通讯录练习) 在联系人控制器中,添加 ...

  8. iOS边练边学--图片的拉伸

    图片拉伸方法一: IOS 5.0以后才有的方法: - (void)viewDidLoad { [super viewDidLoad]; UIImageView *imageView = [[UIIma ...

  9. iOS边练边学--NSURLSessionDataTask实现文件真正的断点续传

    实现重点: NSURLSessionDataTask要设置请求头,从路径中获取文件已经下载的长度(文件没有下载过的话,长度为0).通过这个长度设置请求的Range 如图: 接收到请求的时候key:文件 ...

随机推荐

  1. iOS中的#import和class区别

    在ios中我们经常会在.h和.m中引入一些类啊等等一般用的是#import来进行声明,你们可能也见到在.h文件进用@class来声明的,那么#import和@class进行声明 到底有什么的区别呢?下 ...

  2. 清除Eclipse中的内置浏览器中的历史记录

    eclipse内置浏览器的访问记录是存储在对应的工程目录下的.metadata配置中, 也就是说你新建一个工程的话就没有了. 如果确实要删除那就找到工作空间中的org.eclipse.ui.brows ...

  3. WordPress网站搬家经验总结

    http://cnzhx.net/blog/move-wordpress-site-step-by-step/也许很多人都有跟我类似的经历:因为某种原因需要将自己的WordPress站点从一个空间转移 ...

  4. js 对象操作 对象原型操作 把一个对象A赋值给另一个对象B 并且对象B 修改 不会影响 A对象

    我最近在做一个vue + element-UI + vue-resource + vuex项目的时候,遇到了一个对象的问题. 当我们在项目需要 复制一个对象到另一个对象并且  被复制的对象不能受复制后 ...

  5. RHEL7 -- 使用team替换bonding实现链路聚合网卡绑定

    将网卡enp0s8.enp0s9进行链路绑定 安装teamd包 # yum install teamd 创建一个team链接 # nmcli con add con-name team0 type t ...

  6. 设置PdfPTable与标题间的距离

    使用itextsharp生成PDF时,需要改变标题与文档中添加的PdfPTable间距离,改变SpacingBefore值不起作用,查了下这方面的知识较少,自己跟踪代码,找到了设置位置是在使用iTex ...

  7. socket 请求接收完整的一个http响应(设置recv 接收超时选项SO_RCVTIMEO)

    在前面的系列网络编程文章中,我们都是使用socket 自己实现客户端和服务器端来互相发数据测试,现在尝试使用socket 客户端发 送http 请求给某个网站,然后接收网站的响应数据.http 协议参 ...

  8. Testbench

    作者:桂. 时间:2017-08-15  07:11:50 链接:http://www.cnblogs.com/xingshansi/p/7363048.html 前言 Testbench主要用于mo ...

  9. Android开发7——android.database.CursorIndexOutOfBoundsException:Index -1 requested

    android中数据库处理使用cursor时,游标不是放在为0的下标,而是放在为-1的下标处开始的. 也就是说返回给cursor查询结果时,不能够马上从cursor中提取值. 下面的代码会返回错误Us ...

  10. Android开发3——查看和输出日志信息

    一.错误级别 Error > Warn > Info > Debug > Verbose(冗余) 二.Android项目日志查看视图 Console视图只能看项目的部署到模拟器 ...