Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2611824
  • 博文数量: 877
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 5921
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-05 12:25
个人简介

技术的乐趣在于分享,欢迎多多交流,多多沟通。

文章分类

全部博文(877)

文章存档

2021年(2)

2016年(20)

2015年(471)

2014年(358)

2013年(26)

分类: iOS平台

2015-08-20 12:50:53

http://blog.csdn.net/codywangziham01/article/details/25326411

转自: 

情景1: A-->B  需要把数据传递到B里

代码:


[objc] view plaincopy在CODE上查看代码片派生到我的代码片
  1.  // 跳转 -- 执行login2contacts这个segue  
  2.   [self performSegueWithIdentifier:@"login2contacts" sender:nil];  
  3. 在执行performSegueWithIdentifier 跳转 时,会调用prepareForSegue 方法,在prepareForSegue 中拿到ViewController 来传递数据  
  4. /** 
  5.  *  执行segue后,跳转之前会调用这个方法 
  6.  *  一般在这里给下一个控制器传递数据 
  7.  */  
  8. - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender  
  9. {  
  10.     // 1.取得目标控制器(联系人列表控制器)  
  11.     UIViewController *contactVc = segue.destinationViewController;  
  12.       
  13.     // 2.设置标题  
  14.     contactVc.title = [NSString stringWithFormat:@"%@的联系人列表"self.accountField.text];  
  15.     // contactVc.title 等价于 contactVc.navigationItem.title  
  16. //    contactVc.navigationItem.title = [NSString stringWithFormat:@"%@的联系人列表", self.accountField.text];  
  17. }  
情景2 B—>A  当进入B时,B操作完成返回到A中,需要带回数据到A
思路,要想让B传递到A 首先创建一个代理对象,也就是新建一个协议, A来实现这个协议,那A就相当于一个代理, 然后把A的代理传入到B中,B来调用A中的协议中的方法
代码 B:



[objc] view plaincopy在CODE上查看代码片派生到我的代码片
  1. #import <UIKit/UIKit.h>  
  2.   
  3.   
  4. @class MJAddViewController, MJContact;  
  5.   
  6.   
  7. @protocol MJAddViewControllerDelegate <NSObject>  
  8.   
  9.   
  10. @optional  
  11. //- (void)addViewController:(MJAddViewController *)addVc didAddContactWithName:(NSString *)name phone:(NSString *)phone;  
  12. - (void)addViewController:(MJAddViewController *)addVc didAddContact:(MJContact *)contact;  
  13. @end  
  14.   
  15.   
  16. @interface MJAddViewController : UIViewController  
  17. @property (nonatomic, weak) id<MJAddViewControllerDelegate> delegate;  
  18. @end  
  19.   
  20.   
  21. /** 
  22.  *  添加 
  23.  */  
  24. - (IBAction)add {  
  25.     // 1.关闭当前控制器  
  26.     [self.navigationController popViewControllerAnimated:YES];  
  27.       
  28.     // 2.传递数据给上一个控制器(MJContactsViewController)  
  29.     // 2.通知代理  
  30.     if ([self.delegate respondsToSelector:@selector(addViewController:didAddContact:)]) {  
  31.         MJContact *contact = [[MJContact alloc] init];  
  32.         contact.name = self.nameField.text;  
  33.         contact.phone = self.phoneField.text;  
  34.         [self.delegate addViewController:self didAddContact:contact];  
  35.     }  
  36. }  
  37. A文件  
  38. @interface MJContactsViewController () <MJAddViewControllerDelegate>  
  39. /** 
  40.  *  执行跳转之前会调用 
  41.  *  在这个方法中,目标控制器的view还没有被创建 
  42.  */  
  43. - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender  
  44. {  
  45.     id vc = segue.destinationViewController;  
  46.         // 设置下一个控制器(添加联系人的控制器)的代理  
  47.         MJAddViewController *addVc = vc;  
  48.         addVc.delegate = self;  
  49.      
  50. }  
  51. #pragma mark - MJAddViewController的代理方法  
  52. - (void)addViewController:(MJAddViewController *)addVc didAddContact:(MJContact *)contact  
  53. {  
  54.     // 1.添加模型数据  
  55.     [self.contacts addObject:contact];  
  56.       
  57.     // 2.刷新表格  
  58.     [self.tableView reloadData];  
  59. }  
阅读(179) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~