用于登录ios的UINavigationController流程

时间:2014-02-06 05:28:13

标签: ios objective-c

解决:

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

 UIWindow* window = [[UIApplication sharedApplication] keyWindow];

 window.rootViewController = [[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]] instantiateInitialViewController];

我有以下UINavigationController流程来处理登录... tabbarcontroller转到uinavigationcontroller(视图控制器的根目录)之后的顶部segue。

enter image description here

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

enter image description here

这真的不应该发生,因为我在viewcontroller.m中有以下代码(此处被称为)

- (void)viewDidLoad {
    ...
    self.navigationItem.title = @"Messages";
    self.navigationItem.hidesBackButton = YES;

    NSLog(@"gotten to here");
    ...
}

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

2 个答案:

答案 0 :(得分:5)

我喜欢将我的登录流程与正常的应用程序流程分开。这意味着我没有将登录界面中的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;
}

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

答案 1 :(得分:0)

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

self.navigationItem.hidesBackButton = YES;

它会正常工作。

enter image description here