解决:
用户登录/注册后,使用以下代码转换到主故事板...
UIWindow* window = [[UIApplication sharedApplication] keyWindow];
window.rootViewController = [[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]] instantiateInitialViewController];
我有以下UINavigationController流程来处理登录... tabbarcontroller转到uinavigationcontroller(视图控制器的根目录)之后的顶部segue。
当用户已登录时,执行“this segue works”,以便用户无需登录登录屏幕。这非常有效。我遇到的问题是当用户必须登录时...从登录/注册屏幕到登录屏幕的segue工作正常,但当我从登录屏幕进入标签栏时,会发生以下情况:
这真的不应该发生,因为我在viewcontroller.m中有以下代码(此处被称为)
- (void)viewDidLoad {
...
self.navigationItem.title = @"Messages";
self.navigationItem.hidesBackButton = YES;
NSLog(@"gotten to here");
...
}
有人知道为什么会这样吗?
答案 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;
它会正常工作。