【问题标题】:Is it possible to change the root view of a tabBarItem so tapping takes you to the second view in the hierarchy?是否可以更改 tabBarItem 的根视图,以便点击将您带到层次结构中的第二个视图?
【发布时间】:2010-08-16 19:02:11
【问题描述】:

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

【问题讨论】:

  • 我正在考虑让注册过程成为从第一个选项卡项调用的模态视图控制器可能会更容易..

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


【解决方案1】:

您需要做的是拥有一个名为“LoginViewController”的 UIViewController 作为您的根控制器,但该控制器没有 UITabBar,它只是一个带有登录 UIView 的控制器。并且还有你的 UITabBarController 及其所有内容集,但不包括登录,只有你的基本内容。

用户登录后,您将显示 UITabBarController 及其内容。

-(void) LoginUser {
      // Load UITabBarController
      YourAppDelegate *app = (YourAppDelegate*)[[UIApplication sharedApplication] delegate]; 
      [app.window addSubview:aTabBarController.view];
}

其中 app 是您的 *app 代表。

【讨论】:

    【解决方案2】:

    您无法更改根目录,但您可以通过几种方式解决此问题。也许最简单的方法是在您的 viewWillAppear 方法中检查用户是否登录,如果是,立即加载(使用导航控制器,模态或只是添加一个子视图,具体取决于您的应用程序的结构),没有动画的常规登录视图,然后用户永远不会看到这种情况发生。 (您可以选择其他方式,仅在用户未登录时加载登录屏幕。)

    【讨论】:

    • 我试过 -(void)viewWillAppear:(BOOL)animated{ self.navigationController.navigationBar.hidden = TRUE; HideableTabBarController *tbc = (HideableTabBarController *)self.tabBarController; [tbc hideTabBar:YES 动画:NO]; NSLog(@"isUserValid: %d",self.isUserValid); if (self.isUserValid == TRUE){ MyViewController *viewController = [[MyViewController alloc] initWithStyle:UITableViewStylePlain User:self.user Events:self.processedEvents]; viewController.hidesBottomBarWhenPushed = NO; [self.navigationController pushViewController:viewController 动画:NO]; [viewController 发布];
    • 自动登录可以正常工作,感谢您指出 pushVieWController 的动画:NO。如果我回去,我的导航栏层次结构会搞砸:导航栏保持在顶部,但视图不会改变。
    • 在视图动画之前推送视图可能会混淆导航控制器;它更有可能在viewDidAppear: 中工作。
    【解决方案3】:

    我使用的是导航控制器而不是标签栏控制器,但我认为概念相似或相同。我不希望用户在登录后能够“回溯”到登录屏幕。

    如果用户未登录,我将登录视图构建为在主应用视图控制器的 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.";
    }
    

    【讨论】:

      猜你喜欢
      • 2021-03-26
      • 2015-05-07
      • 1970-01-01
      • 1970-01-01
      • 2011-01-21
      • 1970-01-01
      • 1970-01-01
      • 2012-11-22
      • 2020-12-23
      相关资源
      最近更新 更多