我正在实现一个标签栏应用程序,其中每个标签都有一个控制器。当应用程序运行时,我用一个登录表单抛出一个模态视图。一旦用户登录,我将忽略此模式视图,并且希望将用户名传递给所有标签栏控制器。 我创建在模态视图控制器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方法不会被调用。 我在做什么错?
在此先感谢!