zoukankan      html  css  js  c++  java
  • iOS边练边学--通讯录练习之Segue使用,控制器的数据传递

    一、什么是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中:

  • 相关阅读:
    To My Girlfriend (DP)
    A Simple Nim (SG打表找规律)
    A Boring Question (打表)
    A Simple Chess (Lucas组合数 + 容斥)
    World is Exploding (容斥 + 统计)
    Two (DP)
    K-wolf Number (数位DP)
    Interesting (manacher + 前缀和处理)
    How Many Triangles (极角排序 + 尺取法)
    Divide the Sequence (贪心)
  • 原文地址:https://www.cnblogs.com/gchlcc/p/5325098.html
Copyright © 2011-2022 走看看