IOS开发使用委托delegate在不同窗口之间传递数据

本文介绍了一种在iOS应用中通过代理模式实现视图控制器间值传递的方法。具体演示了如何在一个视图控制器中输入值,并将该值返回到前一个视图控制器的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考文章地址:http://mobile.51cto.com/iphone-284116.htm

出上述文章中所说的页面传值之外还有使用block来传值。


比如: 在窗口1中打开窗口2,然后在窗口2中填入一个数字,这个数字又回传给窗口1。

窗口1

IOS开发使用委托delegate在不同窗口之间传递数据

窗口2

IOS开发使用委托delegate在不同窗口之间传递数据

窗口2的结果传递给窗口1

IOS开发使用委托delegate在不同窗口之间传递数据

1、首先定义个一委托UIViewPassValueDelegate用来传递值

 
  1. @protocol UIViewPassValueDelegate  
  2. - (void)passValue:(NSString *)value;  
  3. @end 

这个protocol 就是用来传递值

2、在窗口1的头文件里,声明delegate

 
  1. #import <UIKit/UIKit.h> 
  2. #import "UIViewPassValueDelegate.h"  
  3. @interface DelegateSampleViewController : UIViewController <UIViewPassValueDelegate> 
  4. {  
  5.     UITextField *_value;  
  6. }  
  7. @property(nonatomic, retain) IBOutlet UITextField *value;  
  8. - (IBAction)buttonClick:(id)sender;  
  9. @end 

并实现这个委托

 
  1. - (void)passValue:(NSString *)value  
  2. {  
  3.   self.value.text = value;  
  4.     NSLog(@"the get value is %@", value);  

button的Click方法,打开窗口2,并将窗口2的delegate实现方法指向窗口1。

 
  1. - (IBAction)buttonClick:(id)sender  
  2. {  
  3.     ValueInputView *valueView = [[ValueInputView alloc] initWithNibName:@"ValueInputView" bundle:[NSBundle mainBundle]];  
  4.     valueView.delegate = self;  
  5.     [self setModalTransitionStyle:UIModalTransitionStyleCoverVertical];  
  6.     [self presentModalViewController:valueView animated:YES];  

第二个窗口的实现

.h 头文件

 
  1. #import <UIKit/UIKit.h> 
  2. #import "UIViewPassValueDelegate.h"  
  3.  
  4. @interface ValueInputView : UIViewController {  
  5.  
  6.     NSObject<UIViewPassValueDelegate> * delegate;  
  7.     UITextField *_value;  
  8. }  
  9. @property(nonatomic, retain)IBOutlet UITextField *value;  
  10. @property(nonatomic, retain) NSObject<UIViewPassValueDelegate> * delegate;  
  11. - (IBAction)buttonClick:(id)sender;  
  12. @end 

.m实现文件

 
  1. #import "ValueInputView.h"  
  2. @implementation ValueInputView  
  3. @synthesize delegate;  
  4. @synthesize value = _value;  
  5. - (void)dealloc {  
  6.     [self.value release];  
  7.     [super dealloc];  
  8. }  
  9.  
  10. - (IBAction)buttonClick:(id)sender  
  11. {  
  12.     [delegate passValue:self.value.text];  
  13.     NSLog(@"self.value.text is%@", self.value.text);  
  14.     [self dismissModalViewControllerAnimated:YES];      
  15.      
  16. }  
  17. - (void)didReceiveMemoryWarning {  
  18.     // Releases the view if it doesn't have a superview.  
  19.     [super didReceiveMemoryWarning];  
  20.       
  21.     // Release any cached data, images, etc. that aren't in use.  
  22. }  
  23.  
  24. - (void)viewDidUnload {  
  25.     [super viewDidUnload];  
  26.     // Release any retained subviews of the main view.  
  27.     // e.g. self.myOutlet = nil;  
  28. }  
  29.  
  30. /*  
  31. // Only override drawRect: if you perform custom drawing.  
  32. // An empty implementation adversely affects performance during animation.  
  33. - (void)drawRect:(CGRect)rect {  
  34.     // Drawing code.  
  35. }  
  36. */  
  37. @end 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值