一、什么是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. vi命令速查图

    Lesson 1 Lesson 2 Lesson 3 Lesson 4 Lesson 5 Lesson 6 Lesson 7

  2. POJ 1364 King (差分约束)

    King Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 8660   Accepted: 3263 Description ...

  3. js LINQ教程

    在说LINQ之前必须先说说几个重要的C#语言特性 一:与LINQ有关的语言特性 1.隐式类型 (1)源起 在隐式类型出现之前, 我们在声明一个变量的时候, 总是要为一个变量指定他的类型 甚至在fore ...

  4. RabbitMQ与.net core(五) topic类型 与 headers类型 的Exchange

    1.topic类型的Exchange 我们之前说过Topic类型的Exchange是direct类型的模糊查询模式,可以通过routkey来实现模糊消费message,topic的模糊匹配有两种模式: ...

  5. Eclipse安装goclipse插件方法

    第一步:打开菜单栏“Help”-----"Eclipse Maketplace". 第二部:在弹出框的Find框中输入GoClipse,等待搜索结果出来后结果如下: 第三步:点击“ ...

  6. C#封装百度Web服务API处理包含(Geocoding API,坐标转换API)

    1.创建基础参数类 public static class BaiduConstParams { public const string PlaceApIv2Search = "http:/ ...

  7. Android studio 如何让包有层次显示

    Android studio中我新建的包在原来包名后面显示,而我想让包名能层次展示: 方法: 点击如图部分,在弹出框中 去掉 ”compact empty middle package“前面勾

  8. Linux中网络通信中 使用的结构体

    "+++++++++++++++++++++++++ Linux TCP/UDP通信中的结构体 +++++++++++++++++++++++++++++++++++++++" s ...

  9. STL应用之set

    之前在解决一道算法题的时候,应用到set,特意对这个stl的容器类做了一些了解.在我的印象中,set就是一个元素不重复的集合,而事实上也正是这样的.无论从MSDN还是任何其它地方,都会告诉我们set的 ...

  10. PHP采集库-Snoopy.class.php

    Snoopy是一个php类,用来模拟浏览器的功能,可以获取网页内容,发送表单. Snoopy的特点: 1.抓取网页的内容 fetch 2.抓取网页的文本内容 (去除HTML标签) fetchtext ...