以下就实现了使用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. }

使用Delegate在两个ViewController之间传值的更多相关文章

  1. 使用Block在两个界面之间传值

    首先,创建两个视图控制器,在第一个视图控制器中创建一个UILabel和一个UIButton,其中UILabel是为了显示第二个视图控制器传过来的字符串,UIButton是为了push到第二个界面. 第 ...

  2. iOS开发:使用Block在两个界面之间传值(Block高级用法:Block传值)

    iOS开发:使用Block在两个界面之间传值(Block高级用法:Block传值)   使用Block的地方很多,其中传值只是其中的一小部分,下面介绍Block在两个界面之间的传值: 先说一下思想: ...

  3. WPF中实现两个窗口之间传值

    在使用WPF的时候,我们经常会用到窗体之间传值,下面示例主窗口传值到子窗口,子窗口传值到主窗口的方法. 一.主窗口向子窗口传值 主窗口向子窗口传值主要方法就是在子窗口建立一个接收主窗口值的变量,然后实 ...

  4. winform两个窗体之间传值(C#委托事件实现)

    委托 定义一个委托,声明一个委托变量,然后让变量去做方法应该做的事. 委托是一个类型 事件是委托变量实现的 经典例子:两个winform窗体传值 定义两个窗体:form1和form2 form1上有一 ...

  5. 通过url在两个页面之间传值

    今天开发遇到一个需要通过url传值才能解决的问题,就查了一下资料 一下是整理的结果: 假如需要把a页面的值传到b页面 a页面代码 <script type="text/javascri ...

  6. 两个iframe之间传值

    例如:点击后会把另一个iframe中的值得到弹出 Main: <html lang="en" xmlns="http://www.w3.org/1999/xhtml ...

  7. Block作为property属性实现页面之间传值(代替Delegate代理与协议结合的方法)

    需求:在ViewController中,点击Button,push到下一个页面NextViewController,在NextViewController的输入框TextField中输入一串字符,返回 ...

  8. android:两个应用之间怎样传值之activity

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/zjh171/article/details/37738579 两个应用之间怎样传值.事实上这个标题太 ...

  9. spring boot 之如何在两个页面之间传递值(转)

    原文地址:spring boot 之如何在两个页面之间传递值 问题:页面之间的跳转,通常带有值的传输,但是,在现在比较流行的SPRING MVC WEB 开发模型中,设计机制导致页面之间的直接接跳转和 ...

随机推荐

  1. shell脚本中的反引号,单引号,双引号与反斜杠

    转自:http://blog.sina.com.cn/s/blog_6561ca8c0102we2i.html 反引号位 (`)经常被忽略,而且容易与单引号弄混.它位于键盘的Tab键的上方.1键的左方 ...

  2. Excel 下拉菜单制作

    废话少说吧,以图明示: 图1 操作步骤(环境为Office 2013) 备注,第四步,可以选择页面中的数据源,也可以以“,”分割的方式输入字符串 图2 制作效果

  3. 多校连萌15-8-12#A

    #include <cstdio> #include <iostream> #include <algorithm> #include <queue> ...

  4. 1.Python字符编码

    1.编码简介 编码的种类情况 ASCII 占1个字节,只支持英文 GB2312 占2个字节,支持6700+汉字 GBK GB2312的升级版,支持21000+汉字 ks_c_5601-1987 韩国编 ...

  5. mysql 配置,还得多看看~

    http://blog.chinaunix.net/uid-20639775-id-154429.html

  6. 对生产者和消费者问题的另一个解决办法是使用QWaitCondition(封装好了wakeOne,wakeAll,而且与QReadWriteLock对接,几乎是万能的办法)

    对生产者和消费者问题的另一个解决办法是使用QWaitCondition,它允许线程在一定条件下唤醒其他线程.其中wakeOne()函数在条件满足时随机唤醒一个等待线程,而wakeAll()函数则在条件 ...

  7. html5 10大html5前端框架

    Bootstrap 首先说 Bootstrap,估计你也猜到会先说或者一定会有这个( 呵呵了 ),这是说明它的强大之处,拥有框架一壁江山的势气.自己刚入道的时候本着代码任何一个字母都得自己敲出来挡我者 ...

  8. SQLcl

    参考博客: https://wangfanggang.com/Oracle/sqlcl/ 执行show sqlformat可以看到当前格式化样式为:default 让我们修改下显示结果的样式:set ...

  9. UVA 11624 - Fire! 图BFS

    看题传送门 昨天晚上UVA上不去今天晚上才上得去,这是在维护么? 然后去看了JAVA,感觉还不错昂~ 晚上上去UVA后经常连接失败作死啊. 第一次做图的题~ 基本是照着抄的T T 不过搞懂了图的BFS ...

  10. nginx服务器,访问时如何不直接显示index.php,而是显示目录

    版权声明:m_nanle_xiaobudiu https://blog.csdn.net/m_nanle_xiaobudiu/article/details/79502787 效果: 这里,我使用的是 ...