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

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

  • 1.使用代理(自定义delegate)
  • 步骤:
    a.在需要代理的控制器定义代理;
    b.定义代理后,应该在使用代理的时候(比如点击按键),定义一个模型类,目的是把此控制器的数据传给模型;
    c.判断代理函数是否被响应,响应之后调用代理函数;
    d.跳回到源控制器;
    e.在源控制器-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender;函数中获取目的控制器,然后将目的控制器的代理设置为self
    f.在代理函数中将目的控制器的模型添加到源控制器的NSMutableArray数组中,并刷新tableView的数据。
//目的控制器 .h文件中
#import 
@class LWBContact;
@class LWBAddViewController;
//自定义代理
@protocol LWBAddViewControllerDelegate 
@optional
-(void)addViewController: (LWBAddViewController *)addVC didClickBtnToAddContact: (LWBContact *)contact;
@end

@interface LWBAddViewController : UIViewController
//定义delegate属性
@property (nonatomic, weak) id  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文件中必须包含 
-(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];
}


    1. Block方法
  • 步骤
    a.

你可能感兴趣的:(控制器之间的传值(逆传))