一、什么是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. 总结PLSQL的快捷键以及使用技巧

    http://www.dedecms.com/knowledge/data-base/oracle/2012/0724/3643.html 最近在开发过程中,遇到一些麻烦,就是开发效率问题,有时候其他 ...

  2. Error_GL_KeyflexfieldDefinitionFactory.getStructureNumber无法找到应用产品

    2014-07-12 BaoXinjian

  3. Unix环境高级编程(八)进程关系

    本章看后给人似懂非懂的感觉,主要是不知道实际当中如何去使用.通过前面几章的学习,每个进程都有一个父进程,当子进程终止时,父进程得到通知并取得子进程的退出状态.先将本章基本的知识点总结如下,日后再看时候 ...

  4. 清理linux 某个文件夹下面所有的log文件

    #!/bin/sh #目标文件夹下面所有问题 target_dir="/app/" #删除2天前新建的后缀为log的文件 -name "*.log" -exec ...

  5. Latex--TikZ和PGF--高级文本绘图,思维绘图,想到--得到!

    Latex--TikZ和PGF--高级文本绘图,思维绘图,想到--得到! TikZ和PGF是一种用在TeX上的CLI绘图工具.CLI和GUI是两种常见的绘图方式,前者是所想即所得(WYTIWYG)的, ...

  6. 使用 docker 搭建 openvpn,创建、删除用户证书

    我自己的配置,服务器:ubuntu16.04 + docker 17.12.0-ce:客户端:win10 + openvpn2.4.5 1 在dockerhub上搜索 openvpn,我是用的是 进去 ...

  7. cocos2dx 3.x避免空customCommand

    1,导致性能悲剧的写法: class A:public CCNode{ public: A(){ m_sprite=NULL; m_isDrawDebug=false; } virtual~A(){} ...

  8. Java web中WEB-INF目录理解

    WEB-INF是Java的WEB应用的安全目录.所谓安全就是客户端无法访问,只有服务端可以访问的目录.如果想在页面中直接访问其中的文件,必须通过web.xml文件对要访问的文件进行相应映射才能访问. ...

  9. JAVA文件转换为Base64

    JAVA文件转换为Base64 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream ...

  10. MySQL通过视图(或临时表)实现动态SQL(游标)

    >参考de优秀文章 写MySQL存储过程实现动态执行SQL Dynamic cursor in stored procedure MySQL通过视图(或临时表)实现动态SQL(游标). 因在实现 ...