IOS開發使用委託delegate在不同視窗之間傳遞資料
本文轉自:http://mobile.51cto.com/iphone-284116.htm
IOS開發使用委託delegate在不同視窗之間傳遞資料是本文要介紹的內容,主要是來講解如何使用委託delegate在不同視窗之間傳遞資料,具體內容來看詳細內容。在IOS開發裡兩個UIView視窗之間傳遞參數方法有很多,比如
1、使用SharedApplication,定義一個變數來傳遞.
2、使用檔案,或者NSUserdefault來傳遞
3、通過一個單例的class來傳遞
4、通過Delegate來傳遞。
前面3種方法,暫且不說,這次主要學習如何使用通過Delegate的方法來在不同的UIView裡傳遞資料
比如: 在視窗1中開啟視窗2,然後在視窗2中填入一個數字,這個數字又回傳給視窗1。
1、首先定義個一委託UIViewPassValueDelegate用來傳遞值
1 @protocol UIViewPassValueDelegate
2 // 必選方法
3 - (void)passValue:(NSString *)value;
4 // 可選方法
@optional
5 -(void)omethod;
6 @end
這個protocol 就是用來傳遞值
2、在視窗1的標頭檔裡,遵守delegate協議,並實現delegate方法,
//a.h
7 #import <UIKit/UIKit.h>
8 #import "UIViewPassValueDelegate.h"
9
10 @interface DelegateSampleViewController : UIViewController <UIViewPassValueDelegate>
11 {
12 UITextField *_value;
13 }
14 @property(nonatomic, retain) IBOutlet UITextField *value;
15 - (IBAction)buttonClick:(id)sender;
16 @end
在a.m中實現這個委託的必選方法
17 - (void)passValue:(NSString *)value
18 {
19 self.value.text = value;
20 }
21 -(void)optionalMethod{
22 }
button的Click方法,開啟視窗2,並將視窗2的delegate實現方法指向視窗1。
23 - (IBAction)buttonClick:(id)sender
24 {
25 ValueInputView *valueView = [[ValueInputView alloc] initWithNibName:@"ValueInputView" bundle:[NSBundle mainBundle]];
26 valueView.delegate = self; // 將a類中的self傳遞給b類的delegate
27 [self setModalTransitionStyle:UIModalTransitionStyleCoverVertical];
28 [self presentModalViewController:valueView animated:YES];
29 }
第二個視窗的實現
b.h 檔案
30 #import <UIKit/UIKit.h>
31 #import "UIViewPassValueDelegate.h"
32
33 @interface ValueInputView : UIViewController {
34
35 NSObject<UIViewPassValueDelegate> * delegate;
36 UITextField *_value;
37 }
38 @property(nonatomic, retain)IBOutlet UITextField *value;
39 @property(nonatomic, assign) NSObject<UIViewPassValueDelegate> * delegate; //這裡用assign而不用retain是為了防止引起循環參考。
40 - (IBAction)buttonClick:(id)sender;
41 @end
b.m檔案
42 #import "ValueInputView.h"
43 @implementation ValueInputView
44 @synthesize delegate;
45 @synthesize value = _value;
46 - (void)dealloc {
47 [self.value release];
48 [super dealloc];
49 }
50
51 - (IBAction)buttonClick:(id)sender
52 {
53 [delegate passValue:self.value.text]; // 通過delegate調用代理方法
54 NSLog(@"self.value.text is%@", self.value.text);
55 [self dismissModalViewControllerAnimated:YES];
56
57 }
58 - (void)didReceiveMemoryWarning {
59 // Releases the view if it doesn't have a superview.
60 [super didReceiveMemoryWarning];
61
62 // Release any cached data, images, etc. that aren't in use.
63 }
64
65 - (void)viewDidUnload {
66 [super viewDidUnload];
67 // Release any retained subviews of the main view.
68 // e.g. self.myOutlet = nil;
69 self.delegate = nil;
70 }
71
72
@end