最近搜关于协议和代理使用相关内容的时候发现雷同太多,这篇是很早前整理的我已经记不清是自己修改过了的,还是直接在往上复制下来的,不过感觉介绍还是蛮细致的
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);
5. }
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];
7. }
第二个窗口的实现
.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