美文网首页
控制器之间的顺传值和逆传值

控制器之间的顺传值和逆传值

作者: Mario_ZJ | 来源:发表于2016-08-14 10:44 被阅读196次

顺传值 (A控制器->到B控制器,将A控制器中的某些数据传递给B控制器)

  • 上一级控制器传递给下一级控制器,直接能拿到下一级控制器,拿到之后,做什么事情都行
  • 思路:
  • 1.在B控制器中设置用于接收数据的属性
  • 2.在从A控制器跳转到B控制器的同时,拿到B控制器的这个属性,进行赋值
  • 如何拿到B控制器
    • 通过纯代码的方式跳转的

//创建B控制器
UIViewController * Bvc = [[UIViewController alloc] alloc];
//将值赋值给B控制器的属性
Bvc.接收数据的属性 = Avc的某个数据值
//跳转
push的方式跳转 或者 modal的方式跳转
```

  • 通过storyboard布局控制器实现控制器间跳转
    通过方法prepareForSegue拿到要跳转到的下一个控制器
//在使用prepareForSegue方法前,一定要先通过performSegueWithIdentifier:方法指定要跳转到的控制器之间连线的标识Identifier
//根据标识执行指定的segue线
[self performSegueWithIdentifier:@"contactVC" sender:nil];
/**
performSegueWithIdentifier底层实现
     1.根据标识到storyBoard查找有没有这根线.segue.
     2.创建UIStoryboardSegue对象.
     3.把当前控制器设置成它的源控制器segue.sourceViewController = self;
     4.创建目标控制器(segue剪头指向的控制器),并且给segue.destinationViewController =  segue剪头指向的控制器
     5.segue准备完毕.[self prepareForSegue];
     6.[segue perform]
       [segue perform]底层  
       [segue.sourceViewController.navigationController pushViewController:segue.destinationViewController animated:YES]
*/
//prepareForSegue作用:在跳转之前,做一些准备工作,一般给跳转的下一个控制器传值
//prepareForSegue什么时候调用:在执行segue后,跳转之前调用
//通过prepareForSegue这个方法,可以拿到要跳转到的控制器"destinationViewController"和当前执行跳转的控制器"sourceViewController"
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    NSLog(@"%@",segue.sourceViewController);
    //获取目标控制器
    XMGContactVC_2 *contactVC =  segue.destinationViewController;
//将需要传递的值传递给目标控制器的属性
    contactVC.accountName = self.accountTextF.text;
}

逆传值(A控制器 <- B控制器,经B控制器中设置的数据反传回给A控制器)

  • 下一级控制器传递给上一级控制器,用代理/通知/block。上一级控制器作为下一级的代理,监听下一级控制器的事情
  • 代理思路
  • 1.在B控制器中设置定义协议将要回传的数据设置为代理方法的参数,设置代理属性
  • 2.在A控制器中获取B控制器,成为B控制器的代理,并实现代理方法,以拿取到数据
//通过代理的方法实现逆传值
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
        //获取目标控制器
        UIViewController * BVc = segue.destinationViewController;
        //设置目标控制器的代理(逆传值)
        BVc.delegate = self;
}
//实现代理方法,在代理方法中将B控制器的值传递到A控制器,这样就能拿到B控制器要回传的数据
  • block思路
    • 1.在B控制器.h文件中通过typedef定义一个block类型
      示例 : typedef ZHJItem * (^editBlock)(ZHJItem *);
    • 2.在B控制器中,通过block类型定义一个block属性
      示例 : @property(nonatomic,copy) editBlock eBlock;
    • 3.在A控制器中获取B控制器,并给B控制器的block类型的属性赋值,以实现回调
//通过Block
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
        ZHJEditVC * editVC = segue.destinationViewController;
        //给编辑联系人控制器的block赋值,以实现回调
        editVC.eBlock = ^ ZHJItem * (ZHJItem * item){
            item = zhjItem;
            [self.tableView reloadData];
            return item;
}
  • 通知思路
    • 1.在B控制器中发出通知,并将要传递的数据以字典的形式传递出去
    • 2.在A控制器中监听通知,通过实现监听通知中的方法,以获取数据
    • B控制器发出通知
/** 发出通知 */
    [[NSNotificationCenter defaultCenter] postNotificationName:@"editContact" object:nil userInfo:nil];
  • A控制器监听通知,并实现通知中的方法
 //接收添加联系人通知
 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(addMember:) name:@"addMember" object:nil];
//实现监听添加联系人的方法
-(void)addMember:(NSNotification *)information
{
    NSDictionary * dict = information.userInfo;
    ZHJItem * zhjItem = dict[@"item"];
    [self.itemArray addObject:zhjItem];
    [self.tableView reloadData];
}

相关文章

  • Block开发使用场景(传值)

    通常我们传值分为顺传和逆传:顺传:给需要传值的对象定义属性来传值。逆传:代理, 通知,单例,block等。此篇文章...

  • iOS最常用的8中传值方式,代理顺传如何实现?

    一、顺传: 1 初始化传值 2 属性传值 二、顺传逆传都行: 3 单例传值 4 代理传值 ...

  • 控制器之间的顺传值和逆传值

    顺传值 (A控制器->到B控制器,将A控制器中的某些数据传递给B控制器) 上一级控制器传递给下一级控制器,直接能拿...

  • iOS-ViewController之间的传值

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

  • IOS-多VC之间的传值

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

  • 控制器之间的传值(逆传)

    控制器之间的传值(逆传) 1.使用代理(自定义delegate) 步骤:a.在需要代理的控制器定义代理;b.定义代...

  • iOS • 记——代理传值和Block传值的简单对比

    在iOS开发中,两个界面之间的传值是开发中经常会用到,给需要传值的对象,直接定义属性就能传值。传值分为两种,顺传和...

  • IOS正向传值,反向传值

    个人理解正向传值:其实就是顶层往底层传值 也可以是第一个控制器传值到第二个控制器 反向传值:就是底层往顶层传值 也...

  • 组件之间的传值

    组件之间的传值,包括父子组件传值,兄弟组件之间的传值,其中父子组件包括父组件向子组件传值和子组件向父组件传值,现在...

  • 组件通信

    vue传值可分为父子之间传值、兄弟组件之间传值、跨代组件之间传值 1.父子之间传值:可以使用$emit/props...

网友评论

      本文标题:控制器之间的顺传值和逆传值

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