用于登录ios的UINavigationController流程

解决了:

用户登录/注册后,使用以下代码转换到主故事板…

UIWindow* window = [[UIApplication sharedApplication] keyWindow]; window.rootViewController = [[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]] instantiateInitialViewController]; 

我有以下UINavigationController流来处理登录… tabbarcontroller进入作为viewcontroller的根的uinavigationcontroller之后的顶部segue。

在此处输入图像描述

当用户已经登录时,执行“this segue works”,以便用户不必登录登录屏幕。 这非常有效。 我遇到的问题是当用户必须登录时…从登录/注册屏幕到登录屏幕的segue工作正常,但是当我从登录屏幕转到标签栏时,会发生以下情况:

在此处输入图像描述

这真的不应该发生,因为我在viewcontroller.m中有以下代码(这里调用了)

 - (void)viewDidLoad { ... self.navigationItem.title = @"Messages"; self.navigationItem.hidesBackButton = YES; NSLog(@"gotten to here"); ... } 

有人知道为什么会这样吗?

我喜欢将登录流程与正常的应用程序流程分开。 这意味着我没有将登录界面中的segue链接到应用程序,但是我在AppDelegate中处理了这个:

 if ([MyUserHandler sharedHelper].isAuthenticated) { [self presentMainInterface]; } else { [self presentWelcomeInterface]; } 

第一种方法执行此操作:

 - (void)presentMainInterface { self.window.rootViewController = [[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]] instantiateInitialViewController]; } 

另一个呈现登录屏幕:

 - (void)presentWelcomeInterface { UIViewController* rootController = [[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]] instantiateViewControllerWithIdentifier:@"loginScreen"]; UINavigationController* navigation = [[UINavigationController alloc] initWithRootViewController:rootController]; self.window.rootViewController = navigation; } 

这样,只有在未对用户进行身份validation时才会加载登录屏幕。

创建UITabBarControler的自定义类(子类),并在storyboard中为tabbarcontroller分配该自定义类。 然后在viewDidLoad中自定义tabbarcontroller添加你的代码

 self.navigationItem.hidesBackButton = YES; 

它会工作正常。

在此处输入图像描述