使用Delegate在两个ViewController之间传值
2024-08-31 20:40:17
以下就实现了使用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文件中实现协议的方法:
[cpp] view plaincopy
- //实现协议,在第一个窗口显示在第二个窗口输入的值,类似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];
- }
最新文章
- 第2月第5天 arc invocation getReturnValue
- NOIP注意事项
- Doccms 中新闻列表排序无效bug的修复
- C/C++相对论——C++中为什么要使用异常?
- 设计模式学习之中介者模式(Mediator,行为型模式)(18)
- Orchard part8
- MVC-登录并设置角色
- web 中 bbs 例子(多次递归)
- 如何在hadoop中控制map的个数
- Mongodb入门并使用java操作Mongodb
- IceMx.Mvc 我的js MVC 框架 一、html代码的分离(视图)
- PHP 关于timezone问题
- (转)java提高篇(五)-----抽象类与接口
- APP在模拟器崩溃,提示__gcd_queue_item_enqueue_hook_block_invoke
- Windows10搭建FTP服务
- Nuget4.0 bug一粒
- XPATH如何选择不包含某一个属性的节点?
- 【学习总结】Markdown 使用的正确姿势
- 求两个整数的最大公约数GCM
- 简单mysql类
热门文章
- win10系统64位安装git后右键运行git bash here生成一个mintty.exe.stackdump文件后闪退解决方案
- hibernate 注解配置<;?xml version=";1.0"; encoding=";UTF-8";?>; <;beans xmlns=";http://www.springframework.org/schema/beans"; xmlns:xsi=";http://www.w3.org/2001/X
- 51Nod——N1118 机器人走方格
- 洛谷 P2790 ccj与zrz之积木问题
- 软件——keil的查找,错误,不能跳转到相应的行
- uva_658_It&;#39;s not a Bug, it&;#39;s a Feature!(最短路)
- 获取iOS顶部状态栏和Navigation的高度
- 动词 + to do、动词 + doing
- 介绍linux设备驱动编程
- xxxyyy