以下就实现了使用Delegate在两个ViewController之间传值,这种场景一般应用在进入子界面输入信息,完后要把输入的信息回传给前一个界面的情况,比如修改用户个人信息,点击修改进入修改界面,修改完后到显示界面显示修改后的结果。

协议中声明的方法:

  1. #import <Foundation/Foundation.h>
  2. @class UserEntity;
  3. @protocol PassValueDelegate <NSObject>
  4. -(void)passValue:(UserEntity *)value;
  5. @end

在第一个窗口实现协议:

  1. #import <UIKit/UIKit.h>
  2. #import "PassValueDelegate.h"
  3. //第一个窗口遵守PassValueDelegate
  4. @interface ViewController : UIViewController<PassValueDelegate>
  5. @property (retain, nonatomic) IBOutlet UILabel *nameLabel;
  6. @property (retain, nonatomic) IBOutlet UILabel *ageLabel;
  7. @property (retain, nonatomic) IBOutlet UILabel *gendarLabel;
  8. - (IBAction)openBtnClicked:(id)sender;
  9. @end

.m文件中实现协议的方法:

  1. //实现协议,在第一个窗口显示在第二个窗口输入的值,类似Android中的onActivityResult方法
  2. -(void)passValue:(UserEntity *)value
  3. {
  4. self.nameLabel.text = value.userName;
  5. self.ageLabel.text = [NSString stringWithFormat:@"%d",value.age];
  6. self.gendarLabel.text = value.gendar;
  7. }

点击Open按钮所触发的事件:

//点击进入第二个窗口的方法

  1. - (IBAction)openBtnClicked:(id)sender {
  2. SecondViewController *secondView = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:[NSBundle mainBundle]];
  3. //设置第二个窗口中的delegate为第一个窗口的self
  4. secondView.delegate = self;
  5. [self.navigationController pushViewController:secondView animated:YES];
  6. [secondView release];
  7. }

第二个窗口中声明一个NSObject对象,该对象遵守PassValueDelegate协议:


  1. #import <UIKit/UIKit.h>
  2. #import "PassValueDelegate.h"
  3. @interface SecondViewController : UIViewController
  4. @property (retain, nonatomic) IBOutlet UITextField *nameTextField;
  5. @property (retain, nonatomic) IBOutlet UITextField *ageTextFiled;
  6. @property (retain, nonatomic) IBOutlet UITextField *gendarTextField;
  7. //这里用assign而不用retain是为了防止引起循环引用。
  8. @property(nonatomic,assign) NSObject<PassValueDelegate> *delegate;
  9. - (IBAction)okBtnClicked:(id)sender;
  10. - (IBAction)closeKeyboard:(id)sender;
  11. @end

输入完毕后,点击OK按钮所触发的事件:

  1. - (IBAction)okBtnClicked:(id)sender {
  2. UserEntity *userEntity = [[UserEntity alloc] init];
  3. userEntity.userName = self.nameTextField.text;
  4. userEntity.gendar = self.gendarTextField.text;
  5. userEntity.age = [self.ageTextFiled.text intValue];
  6. //通过委托协议传值
  7. [self.delegate passValue:userEntity];
  8. //退回到第一个窗口
  9. [self.navigationController popViewControllerAnimated:YES];
  10. [userEntity release];
  11. }

最新文章

  1. 第2月第5天 arc invocation getReturnValue
  2. NOIP注意事项
  3. Doccms 中新闻列表排序无效bug的修复
  4. C/C++相对论——C++中为什么要使用异常?
  5. 设计模式学习之中介者模式(Mediator,行为型模式)(18)
  6. Orchard part8
  7. MVC-登录并设置角色
  8. web 中 bbs 例子(多次递归)
  9. 如何在hadoop中控制map的个数
  10. Mongodb入门并使用java操作Mongodb
  11. IceMx.Mvc 我的js MVC 框架 一、html代码的分离(视图)
  12. PHP 关于timezone问题
  13. (转)java提高篇(五)-----抽象类与接口
  14. APP在模拟器崩溃,提示__gcd_queue_item_enqueue_hook_block_invoke
  15. Windows10搭建FTP服务
  16. Nuget4.0 bug一粒
  17. XPATH如何选择不包含某一个属性的节点?
  18. 【学习总结】Markdown 使用的正确姿势
  19. 求两个整数的最大公约数GCM
  20. 简单mysql类

热门文章

  1. win10系统64位安装git后右键运行git bash here生成一个mintty.exe.stackdump文件后闪退解决方案
  2. hibernate 注解配置&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;beans xmlns=&quot;http://www.springframework.org/schema/beans&quot; xmlns:xsi=&quot;http://www.w3.org/2001/X
  3. 51Nod——N1118 机器人走方格
  4. 洛谷 P2790 ccj与zrz之积木问题
  5. 软件——keil的查找,错误,不能跳转到相应的行
  6. uva_658_It&amp;#39;s not a Bug, it&amp;#39;s a Feature!(最短路)
  7. 获取iOS顶部状态栏和Navigation的高度
  8. 动词 + to do、动词 + doing
  9. 介绍linux设备驱动编程
  10. xxxyyy