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];
}
网友评论