用于登录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;
它会工作正常。