美文网首页
多控制器的delegate方式逆向传参

多控制器的delegate方式逆向传参

作者: YuePr | 来源:发表于2016-02-25 23:03 被阅读0次

delegate方式逆向传参

  • 使用pushViewController方式跳转到另一个UIViewController数据流走向
    • 从当前控制器vc1--->跳转到目标控制器vc2
    • vc2中监控文本,将vc2中的数据回传到vc1展示
  • 数据传输方案
    • 使用delegate方式,让vc1成为vc2的代理,遵守vc2的代理协议,在代理方法实现中获取来自vc2的数据
/**
*当前控制器为vc2,此方法为vc2中一个UIBarButton的点击事件的监听
**/
-(void)addClickt:(UIBarButtonItem *)addClickt{
    YEPEditVC3 * editVC3 = [[YEPEditVC alloc]init];
    editVC3.delegate = self; //设定当前控制器vc1成为目标控制器vc2的代理
    [self.navigationController pushViewController:editVC animated:YES];

#import <UIKit/UIKit.h>
@class contactItem,YEPContactVC1,YEPEditVC2;
/**
* 在vc3的h文件中创建delegate
**/
@protocol YEPAddVCdelegate <NSObject>

-(void)addVC :(YEPEditVC2 *)addVC contactItem:(contactItem *)contactItem;
@end


  • 此时,在vc2中设置文本的监听事件,并调用代理方法,将所需要传递的数据进行设置
-(IBAction)savaClickBtn:(id)sender {
 //设置需要传递的数据模型
    contactItem *item = [contactItem contactItemWith:self.phoneTextF.text andPWD:self.phoneTextF.text];
    if([self.delegate respondsToSelector:@selector(addVC:contactItem:)]) {
    //调用代理方法
        [self.delegate addVC:self contactItem:item];
    //从当前控制器啊跳转到vc1
        [self.navigationController popViewControllerAnimated:YES];
    }
}


  • 则,此时点击完vc2控制器中的save按钮后,会自动将数据以item模型方式传递给vc1,编译器自动跳转到vc1的代理方法中,去做实现,则此时vc1中就有了vc2中传递的属性
-(void)addVC:(YEPEditVC *)addVC contactItem:(contactItem *)contactItem
{
    //把传递过来的数据添加到数组当中
    [self.contactArray addObject:contactItem ];

    self.title = contactItem.name;
     //刷新列表
    [self.tableView reloadData];

}

相关文章

网友评论

      本文标题:多控制器的delegate方式逆向传参

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