情景1: A-->B 需要把数据传递到B里
情景2 B—>A 当进入B时,B操作完成返回到A中,需要带回数据到A
思路,要想让B传递到A 首先创建一个代理对象,也就是新建一个协议, A来实现这个协议,那A就相当于一个代理, 然后把A的代理传入到B中,B来调用A中的协议中的方法
代码 B:
代码:
- // 跳转 -- 执行login2contacts这个segue
- [self performSegueWithIdentifier:@"login2contacts" sender:nil];
- 在执行performSegueWithIdentifier 跳转 时,会调用prepareForSegue 方法,在prepareForSegue 中拿到ViewController 来传递数据
- /**
- * 执行segue后,跳转之前会调用这个方法
- * 一般在这里给下一个控制器传递数据
- */
- - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
- {
- // 1.取得目标控制器(联系人列表控制器)
- UIViewController *contactVc = segue.destinationViewController;
- // 2.设置标题
- contactVc.title = [NSString stringWithFormat:@"%@的联系人列表", self.accountField.text];
- // contactVc.title 等价于 contactVc.navigationItem.title
- // contactVc.navigationItem.title = [NSString stringWithFormat:@"%@的联系人列表", self.accountField.text];
- }
思路,要想让B传递到A 首先创建一个代理对象,也就是新建一个协议, A来实现这个协议,那A就相当于一个代理, 然后把A的代理传入到B中,B来调用A中的协议中的方法
代码 B:
- #import <UIKit/UIKit.h>
- @class MJAddViewController, MJContact;
- @protocol MJAddViewControllerDelegate <NSObject>
- @optional
- //- (void)addViewController:(MJAddViewController *)addVc didAddContactWithName:(NSString *)name phone:(NSString *)phone;
- - (void)addViewController:(MJAddViewController *)addVc didAddContact:(MJContact *)contact;
- @end
- @interface MJAddViewController : UIViewController
- @property (nonatomic, weak) id<MJAddViewControllerDelegate> delegate;
- @end
- /**
- * 添加
- */
- - (IBAction)add {
- // 1.关闭当前控制器
- [self.navigationController popViewControllerAnimated:YES];
- // 2.传递数据给上一个控制器(MJContactsViewController)
- // 2.通知代理
- if ([self.delegate respondsToSelector:@selector(addViewController:didAddContact:)]) {
- MJContact *contact = [[MJContact alloc] init];
- contact.name = self.nameField.text;
- contact.phone = self.phoneField.text;
- [self.delegate addViewController:self didAddContact:contact];
- }
- }
- A文件
- @interface MJContactsViewController () <MJAddViewControllerDelegate>
- /**
- * 执行跳转之前会调用
- * 在这个方法中,目标控制器的view还没有被创建
- */
- - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
- {
- id vc = segue.destinationViewController;
- // 设置下一个控制器(添加联系人的控制器)的代理
- MJAddViewController *addVc = vc;
- addVc.delegate = self;
- }
- #pragma mark - MJAddViewController的代理方法
- - (void)addViewController:(MJAddViewController *)addVc didAddContact:(MJContact *)contact
- {
- // 1.添加模型数据
- [self.contacts addObject:contact];
- // 2.刷新表格
- [self.tableView reloadData];
- }