我正在尝试按照这个问题为登录序列设置一个委托:-如何设置一个简单的委托以在两个视图控制器之间进行通信?
在我的应用程序中,我有一个主视图(MESHomeViewController)。我还有一个登录结构如下:
- MESLoginNavController
- 带有 MESWelcomeViewController 的根视图控制器
- 还有可以推送到堆栈的 MESLoginViewController 和 MESSignupViewControllers。
我的目标是拥有一个仅在用户登录时调用的委托方法。我正在使用委托,因为我不能使用 viewDidLoad,因为视图经常在不同的场合重新加载/显示,所以我需要查看用户何时完成登录。
用户可以通过 Welcome 控制器(通过 Facebook)或登录控制器(通过普通方法)和 Signup(通过 signup ;)登录。
这是我试图在下面实现的: MESHomeViewController.h
#import "MESWelcomeViewController.h"
@interface MESHomeViewController : UIViewController <LoginViewControllerDelegate>
@end
在MESHomeViewController.m中,我检查用户是否已登录,如果他们未完成以下操作:
NSLog(@"not logged in");
MESWelcomeViewController *loginNavVC = [self.storyboard instantiateViewControllerWithIdentifier:@"WelcomeVC"];
loginNavVC.delegate = self;
[self presentModalViewController:loginNavVC animated:NO];
在MESWelcomeViewController.h我有以下内容:
@protocol LoginViewControllerDelegate;
@interface MESWelcomeViewController : UIViewController <NSURLConnectionDataDelegate>
@property (nonatomic, weak) id<LoginViewControllerDelegate> delegate;
@end
@protocol LoginViewControllerDelegate <NSObject>
- (void)didLoginUser;
@end
一旦用户通过自定义方法完全登录。用户登录后,MESWelcomeViewController.m
NSLog(@"%@",self.delegate);
if ([self.delegate respondsToSelector:@selector(didLoginUser)]) {
[self.delegate didLoginUser];
}
但是,没有调用委托方法,对于welcomeViewController,self.delegate 似乎为空。我在想可能我应该根据上述设置将委托设置为登录导航控制器,但是我不确定如何从当前推送到导航上的视图控制器调用委托方法?