美文网首页iOS开发资料收集iOS学习开发iOS学习笔记
浅谈控制器传值之属性传值与segue传值

浅谈控制器传值之属性传值与segue传值

作者: 上冬十二 | 来源:发表于2016-06-13 21:04 被阅读462次

导读

我们在进行程序编写时,往往需要在界面控制器跳转时传值.此处抛开block,代理逆传,谈一谈我所遇到的顺传问题,希望对需要的人有用


属性传值

  • 此方法对于storyboard无效
  • 接收方一定要有属性去接收
  • 传递方需要拿到接收方,进行直接赋值
  • 拿到下一级控制器,对其.h文件中的属性进行赋值
  • 一定要进行push操作
  • 实现代码

上一级控制器

/**
    此处以tableView的cell点击方法为例,将tableview的模型属性传给下一级控制器
*/
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// 获取模型
OAModel *model = self.modelArrs[indexPath.row];
// 获取目标控制器
OADetailsController *deVc = [[OADetailsController alloc] init];
// 对目标控制器属性进行赋值
deVc.model = model;
// push到目标控制器
[self.navigationController pushViewController:deVc animated:YES];
}

下一级控制器.h

// 接收属性
@property (nonatomic,strong) OAModel *model;

下一级控制器.m

//拿到赋值属性直接使用    
self.navigationItem.title = self.model.title;

segue传值


认识segue

  • 什么是Segue

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

    • 唯一标识:@property (nonatomic, readonly) NSString *identifier;
    • 来源控制器:@property (nonatomic, readonly) id sourceViewController;
  • 目标控制器:@property (nonatomic, readonly) id destinationViewController;

  • Segue的分类

    • 自动型:点击某个控件后(比如按钮),自动执行Segue,自动完成界面跳转
    • 自动进行跳转不需要进行判断建议用自动型Segue
  • 手动型:需要通过写代码手动执行Segue,才能完成界面跳转

    • 手动型的Segue需要设置一个标识(Identifier)

    • 在恰当的时刻,使用perform方法执行对应的Segue,完成界面跳转
      [self performSegueWithIdentifier:@"sendValue" sender:nil];
      // Segue必须由来源控制器来执行,也就是说,这个perform方法必须由来源控制器来调用

    • 如果点击某个控件后,需要做一些判断,也就是说:满足一定条件后才跳转到下一个界面,建议使用“手动型Segue”

  • 方法实现过程

来源控制器中实现

   /**
        此处以tableView的cell点击方法为例,将tableview的模型属性传给下一级控制器,
        Segue从cell拖线至下一级控制器
    */
  - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
  if ([segue.identifier isEqualToString:@"SendValue"]) {
    // 获取目标控制器
    UIViewController *vc = segue.destinationViewController;
    // 获取当前点击cell的索引 sender为当前点击的cell
    NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
    // 取出模型
    OAModel *model = self.modelArrs[indexPath.row];
    // 进行赋值
    // value:要赋的值
    // key:下一级控制器接收的同名属性
    [vc setValue:model forKey:@"model"];
  }  
}

目标控制器.h实现

  // 属性要和来源控制器key值同名
@property (nonatomic,strong) OAModel *model;

目标控制器.m实现

  // 拿到赋值属性直接使用
self.navigationItem.title = self.model.title;

-希望对大家有所帮助-

相关文章

  • iOS-ViewController之间的传值

    一、控制器之间的正向传值:1、属性传值1.1、通过storyboard创建控制器//Segue定义:Storybo...

  • 浅谈控制器传值之属性传值与segue传值

    导读 我们在进行程序编写时,往往需要在界面控制器跳转时传值.此处抛开block,代理逆传,谈一谈我所遇到的顺传问题...

  • iOS的五种传值

    前言 iOS常见的五种传值分别为属性传值,通知传值,代理传值,block传值,单例传值 属性传值 用于正向传值,简...

  • Swift常用的界面传值(属性传值、协议传值、闭包传值)

    1、属性传值 属性传值多用于正向传值(A->B) 2、代理传值 代理传值多用于反向传值(B->A) 3、闭包传值 ...

  • iOS的5种传值

    (-)属性传值 属性传值(场景)一般用于正向传值,即第一个界面传值给第二个界面 属性传值是这几大传值中最简单的传值...

  • iOS-传值方式

    传值方式:1、属性传值 方法传值2、代理传值3、单例传值 4、通知传值 NSNotificationCente...

  • 代理

    不同页面间传值是必不可少,传值的方式有很多(方法传值,属性传值,代理传值,单例传值) ,这里主要总结下属性传值和代...

  • iOS 传值方法(属性传值、代理传值、Block、通知、单例)

    iOS 传值方法(属性传值、代理传值、Block、通知、单例)简单的介绍一下几个传值方式 1、属性传值 在传值的时...

  • 常用的传值方法

    1.属性传值(正向) 这样就是正向的属性传值 2.block传值(反向) 思路: 1.首先,创建两个视图控制器,在...

  • IOS-多VC之间的传值

    多VC之间的传值 传值:将一个数据存储到另一对象的属性中过程 正向传值:当A控制器推出B控制器的同时,A给B传值叫...

网友评论

本文标题:浅谈控制器传值之属性传值与segue传值

本文链接:https://www.haomeiwen.com/subject/poledttx.html