我试图遵循这一问题设置为登录序列的代表: - How do I set up a simple delegate to communicate between two view controllers?建立一个代表,以确定登录序列已完成
在我的应用程序有一个主视图(MESHomeViewController)。 我也有一个登录结构如下:
- MESLoginNavController
- 随着MESWelcomeViewController
- 的根视图控制器有可被推送到堆栈也MESLoginViewController和MESSignupViewControllers。
我的目标是有一个委托方法,该方法只调用的时候在我使用的是委托作为,所以我要看看我能不能用viewDidLoad中的观点经常重载/在不同的场合表示,用户登录当用户完成登录时。
用户可以通过Welcome控制器(通过Facebook)或登录控制器(通过常规方法)并通过注册(通过注册)登录。
这是我曾尝试下面来实现: 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];
}
然而登录,委托方法不被调用时,它出现在self.delegate是空的welcomeViewController。我想可能我应该根据上述设置将代理设置为Login Nav Controller,但是我不确定如何从当前在nav上推送的视图控制器调用委托方法?
谢谢,我试图使用你的init,但是当我NSLog的self.delegate(在登录完整的块内)我仍然越来越(空)?登录按下面的''[self presentModalViewController:[self.storyboard instantiateViewControllerWithIdentifier:@“WelcomeVC”] animated:NO]; ''这会将故事板中的标识符推向LoginNavController(以Welcome Controller作为根)。我不确定如何实现你的第二点,同时以这种方式呈现模态 – StuartM 2013-05-10 15:35:59
事实上,如果我将该init函数添加到MESWelcomeViewController中,它永远不会被初始化调用?这是对的吗? – StuartM 2013-05-10 15:37:51
我给出的init函数不会自动调用,它必须显式调用,而不是默认的初始化程序。如果您正在使用故事板,则可能应该使用设置委托属性的替代方法。我从来没有使用故事板,但你应该可以做这样的事情: MESWelcomeViewController * welcomeView = [self.storyboard instantiateViewControllerWithIdentifier:@“WelcomeVC”]; [welcomeView setDelegate:self]; [self presentModalViewController:welcomeView animated:NO]; – Doc 2013-05-10 15:43:10