在Obj-C / iOS中。我们的UI设计需要一个初始屏幕,其中包含注册或登录选项。完成其中任何一项操作后,用户数据将保存到手机中,并显示tabBarController。但是,点击底部的tabBar会将视图返回到“登录或注册”屏幕。是否可以在tabBarItem的层次结构中更改根视图控制器?
答案 0 :(得分:2)
你需要做的是将一个名为“LoginViewController”的UIViewController作为你的根控制器,但是这个控制器没有UITabBar,它只是一个带有Login UIView的控制器。还有你的UITabBarController及其所有内容集,但不包括Login只有你的基本内容。
用户登录后,显示UITabBarController及其内容。
-(void) LoginUser {
// Load UITabBarController
YourAppDelegate *app = (YourAppDelegate*)[[UIApplication sharedApplication] delegate];
[app.window addSubview:aTabBarController.view];
}
其中app是您的* app Delegate。
答案 1 :(得分:1)
您无法更改根目录,但您可以通过以下几种方式解决此问题。也许最简单的是在你的viewWillAppear方法中检查用户是否登录,如果是,立即加载(使用导航控制器,模态或只是添加一个子视图,具体取决于你的应用程序的结构),常规登录视图没有动画,然后用户永远不会看到这种情况发生。 (您可以选择以其他方式执行此操作,仅在用户未登录时才加载登录屏幕。)
答案 2 :(得分:0)
我使用的是导航控制器而不是标签栏控制器,但我认为这个概念类似或相同。我不希望用户在登录后能够“追溯”到登录屏幕。
我在视图中构建了我的日志作为模式视图,如果用户未登录,则在主应用程序视图控制器的ViewDidLoad中调用:
if (isUserLoggedIn == NO) {
[self performSegueWithIdentifier:@"logInUserModalSegue" sender:self];
}
主视图会短暂加载,然后LogIn模式视图会动画显示,覆盖所有内容。
当用户登录时,我检查凭据,然后解除(或不关闭)模态控制器,如下所示:
if (logInStatus == YES) {
[[self presentingViewController] dismissViewControllerAnimated:YES
completion:NO];
} else {
self.errorDisplay.text = @"Sorry, there was an error logging in.";
}