我正在實現一個標籤欄應用程序,其中每個標籤都有一個控制器。當應用程序運行時,我用一個登錄表單拋出一個模態視圖。一旦用戶登錄,我將忽略此模式視圖,並且希望將用戶名傳遞給所有標籤欄控制器。 我創建在模態視圖控制器LoginViewController.h
一個協議:協議和代表,將數據從模式視圖表單傳遞到所有標籤欄控制器
@protocol PassUserInfoDelegate <NSObject>
@required
- (void) passUserInfo: (NSString *)string;
@end
@interface LoginViewController : UIViewController <UIApplicationDelegate> {
id <PassUserInfoDelegate> delegate;
}
和在某處實施LoginViewController.h
我打電話[[self delegate] passUserInfo:idJson];
以便將idJson
值傳遞給委託。
然後,在HomeViewController.h
我做的:
@interface HomeViewController : UIViewController <PassUserInfoDelegate>
所以該控制器是該協議的一個代表。 並在實施HomeViewController.m
我創建協議的方法:
- (void) passUserInfo:(NSString *)string
{
NSLog(@"I got the string = %@", string);
}
,我分配HomeViewController作爲協議的LoginViewController委託:
- (void)viewDidLoad
{
loginViewController = [[LoginViewController alloc] init];
[loginViewController setDelegate:self];
[super viewDidLoad];
}
到目前爲止,這是工作。我從協議中得到idJson字符串給這個類。 現在我想要做的是在另一個類中做同樣的事情,並且我希望那個類也獲得idJson值。所以,我在Home2ViewController.h
同樣的事情創建:
@interface HomeView2Controller : UIViewController <PassUserInfoDelegate>
,並建立了協議方法:
- (void) passUserInfo:(NSString *)string
{
NSLog(@"I got the string = %@", string);
}
- (void)viewDidLoad
{
loginViewController = [[LoginViewController alloc] init];
[loginViewController setDelegate:self];
[super viewDidLoad];
}
但在這個類此passUserInfo方法不會被調用。 我在做什麼錯?
在此先感謝!