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

2016-08-14  本文已影响196人  Mario_ZJ

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

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

//在使用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控制器)

//通过代理的方法实现逆传值
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
        //获取目标控制器
        UIViewController * BVc = segue.destinationViewController;
        //设置目标控制器的代理(逆传值)
        BVc.delegate = self;
}
//实现代理方法,在代理方法中将B控制器的值传递到A控制器,这样就能拿到B控制器要回传的数据
//通过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;
}
/** 发出通知 */
    [[NSNotificationCenter defaultCenter] postNotificationName:@"editContact" object:nil userInfo:nil];
 //接收添加联系人通知
 [[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];
}
上一篇 下一篇

猜你喜欢

热点阅读