是否可以更改tabBarItem的根视图,以便点击将您带到层次结构中的第二个视图?

时间:2010-08-16 19:02:12

标签: iphone objective-c cocoa-touch xcode uitabbarcontroller

在Obj-C / iOS中。我们的UI设计需要一个初始屏幕,其中包含注册或登录选项。完成其中任何一项操作后,用户数据将保存到手机中,并显示tabBarController。但是,点击底部的tabBar会将视图返回到“登录或注册”屏幕。是否可以在tabBarItem的层次结构中更改根视图控制器?

3 个答案:

答案 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.";
}