使用Delegate在两个ViewController之间传值
以下就实现了使用Delegate在两个ViewController之间传值,这种场景一般应用在进入子界面输入信息,完后要把输入的信息回传给前一个界面的情况,比如修改用户个人信息,点击修改进入修改界面,修改完后到显示界面显示修改后的结果。
协议中声明的方法:
- #import <Foundation/Foundation.h>
- @class UserEntity;
- @protocol PassValueDelegate <NSObject>
- -(void)passValue:(UserEntity *)value;
- @end
在第一个窗口实现协议:
- #import <UIKit/UIKit.h>
- #import "PassValueDelegate.h"
- //第一个窗口遵守PassValueDelegate
- @interface ViewController : UIViewController<PassValueDelegate>
- @property (retain, nonatomic) IBOutlet UILabel *nameLabel;
- @property (retain, nonatomic) IBOutlet UILabel *ageLabel;
- @property (retain, nonatomic) IBOutlet UILabel *gendarLabel;
- - (IBAction)openBtnClicked:(id)sender;
- @end
.m文件中实现协议的方法:
- //实现协议,在第一个窗口显示在第二个窗口输入的值,类似Android中的onActivityResult方法
- -(void)passValue:(UserEntity *)value
- {
- self.nameLabel.text = value.userName;
- self.ageLabel.text = [NSString stringWithFormat:@"%d",value.age];
- self.gendarLabel.text = value.gendar;
- }
点击Open按钮所触发的事件:
//点击进入第二个窗口的方法
- - (IBAction)openBtnClicked:(id)sender {
- SecondViewController *secondView = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:[NSBundle mainBundle]];
- //设置第二个窗口中的delegate为第一个窗口的self
- secondView.delegate = self;
- [self.navigationController pushViewController:secondView animated:YES];
- [secondView release];
- }
第二个窗口中声明一个NSObject对象,该对象遵守PassValueDelegate协议:
- #import <UIKit/UIKit.h>
- #import "PassValueDelegate.h"
- @interface SecondViewController : UIViewController
- @property (retain, nonatomic) IBOutlet UITextField *nameTextField;
- @property (retain, nonatomic) IBOutlet UITextField *ageTextFiled;
- @property (retain, nonatomic) IBOutlet UITextField *gendarTextField;
- //这里用assign而不用retain是为了防止引起循环引用。
- @property(nonatomic,assign) NSObject<PassValueDelegate> *delegate;
- - (IBAction)okBtnClicked:(id)sender;
- - (IBAction)closeKeyboard:(id)sender;
- @end
输入完毕后,点击OK按钮所触发的事件:
- - (IBAction)okBtnClicked:(id)sender {
- UserEntity *userEntity = [[UserEntity alloc] init];
- userEntity.userName = self.nameTextField.text;
- userEntity.gendar = self.gendarTextField.text;
- userEntity.age = [self.ageTextFiled.text intValue];
- //通过委托协议传值
- [self.delegate passValue:userEntity];
- //退回到第一个窗口
- [self.navigationController popViewControllerAnimated:YES];
- [userEntity release];
- }
使用Delegate在两个ViewController之间传值的更多相关文章
- 使用Block在两个界面之间传值
首先,创建两个视图控制器,在第一个视图控制器中创建一个UILabel和一个UIButton,其中UILabel是为了显示第二个视图控制器传过来的字符串,UIButton是为了push到第二个界面. 第 ...
- iOS开发:使用Block在两个界面之间传值(Block高级用法:Block传值)
iOS开发:使用Block在两个界面之间传值(Block高级用法:Block传值) 使用Block的地方很多,其中传值只是其中的一小部分,下面介绍Block在两个界面之间的传值: 先说一下思想: ...
- WPF中实现两个窗口之间传值
在使用WPF的时候,我们经常会用到窗体之间传值,下面示例主窗口传值到子窗口,子窗口传值到主窗口的方法. 一.主窗口向子窗口传值 主窗口向子窗口传值主要方法就是在子窗口建立一个接收主窗口值的变量,然后实 ...
- winform两个窗体之间传值(C#委托事件实现)
委托 定义一个委托,声明一个委托变量,然后让变量去做方法应该做的事. 委托是一个类型 事件是委托变量实现的 经典例子:两个winform窗体传值 定义两个窗体:form1和form2 form1上有一 ...
- 通过url在两个页面之间传值
今天开发遇到一个需要通过url传值才能解决的问题,就查了一下资料 一下是整理的结果: 假如需要把a页面的值传到b页面 a页面代码 <script type="text/javascri ...
- 两个iframe之间传值
例如:点击后会把另一个iframe中的值得到弹出 Main: <html lang="en" xmlns="http://www.w3.org/1999/xhtml ...
- Block作为property属性实现页面之间传值(代替Delegate代理与协议结合的方法)
需求:在ViewController中,点击Button,push到下一个页面NextViewController,在NextViewController的输入框TextField中输入一串字符,返回 ...
- android:两个应用之间怎样传值之activity
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/zjh171/article/details/37738579 两个应用之间怎样传值.事实上这个标题太 ...
- spring boot 之如何在两个页面之间传递值(转)
原文地址:spring boot 之如何在两个页面之间传递值 问题:页面之间的跳转,通常带有值的传输,但是,在现在比较流行的SPRING MVC WEB 开发模型中,设计机制导致页面之间的直接接跳转和 ...
随机推荐
- SN74HC573ANSR 锁存器
这是它的工作电压范围 这个是功能表,数电上曾经学过: 内部的框图,也是数电的知识:
- Oracle 中的Interger类型
引自 wolfAone, oracle有没有integer类型,这种类型的最大值是多少啊. Integer是Number类型的子类型: NUMBER Type You use the NUMBER d ...
- 7 Java Performance Metrics to Watch After a Major Release--转
原文地址:https://dzone.com/articles/7-java-performance-metrics-to-watch-after-a-major-1 The Java perform ...
- stm32的dma缓冲区长度,,存放数据数组会不会冲掉
- mybatis-generator使用
开发工具:eclipse,依赖环境 :maven 首先在eclipse marketplace中安装mybatis-generator,如图: 安装后需要重启. 新建一个maven项目MybatisG ...
- spring boot 2.x Path with "WEB-INF" or "META-INF"
学习spring boot 2.x时,使用jsp作为前端页面.在application.properties配置了jsp所在位置 spring.mvc.view.prefix:/WEB-INF/vie ...
- @EnableAsync和@Async开始异步任务支持
Spring通过任务执行器(TaskExecutor)来实现多线程和并发编程.使用ThreadPoolTaskExecutor可实现一个基于线程池的TaskExecutor.在开发中实现异步任务,我们 ...
- [Ramda] Getter and Setter in Ramda & lens
Getter on Object: 1. prop: R.prop(}); //=> 100 R.prop('x', {}); //=> undefined 2. props: R.pro ...
- bootstrap课程1 bootstrap为什么这么火
bootstrap课程1 bootstrap为什么这么火 一.总结 一句话总结:响应式,样式多,功能多. 1.bootstrap通过什么药实现响应式? 响应式web布局是让用户通过不同尺寸的浏览器都可 ...
- C#无符号右移
/// <summary> /// 无符号右移,与JS中的>>>等价 /// </summary> /// & ...