控制器之间的传值(逆传)
- 1.使用代理(自定义delegate)
- 步骤:
a.在需要代理的控制器定义代理;
b.定义代理后,应该在使用代理的时候(比如点击按键),定义一个模型类,目的是把此控制器的数据传给模型;
c.判断代理函数是否被响应,响应之后调用代理函数;
d.跳回到源控制器;
e.在源控制器-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender;
函数中获取目的控制器,然后将目的控制器的代理设置为self
;
f.在代理函数中将目的控制器的模型添加到源控制器的NSMutableArray
数组中,并刷新tableView
的数据。
//目的控制器 .h文件中
#import <UIKit/UIKit.h>
@class LWBContact;
@class LWBAddViewController;
//自定义代理
@protocol LWBAddViewControllerDelegate <NSObject>
@optional
-(void)addViewController: (LWBAddViewController *)addVC didClickBtnToAddContact: (LWBContact *)contact;
@end
@interface LWBAddViewController : UIViewController
//定义delegate属性
@property (nonatomic, weak) id <LWBAddViewControllerDelegate> delegate;
@end
//目的控制器 .m文件中
- (IBAction)add:(id)sender {
LWBContact *c = [LWBContact contactWithName:self.nameField.text phone:self.phoneNumeberField.text];
if ([_delegate respondsToSelector:@selector(addViewController:didClickBtnToAddContact:) ]) {
[_delegate addViewController:self didClickBtnToAddContact:c];
}
[self.navigationController popViewControllerAnimated:YES];
}
//源控制器 .m文件中必须包含 <LWBAddViewControllerDelegate>
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{//获取目的控制器
LWBAddViewController *c = segue.destinationViewController;
//设置代理为self
c.delegate = self;
}
-(void)addViewController:(LWBAddViewController *)addVC didClickBtnToAddContact:(LWBContact *)contact
{
[_contacts addObject:contact];
//必须刷新数据才能看到
[self.tableView reloadData];
}