【问题标题】:hide UITabBarController's tab bar when pushing UIViewController推送 UIViewController 时隐藏 UITabBarController 的标签栏
【发布时间】:2012-06-26 13:10:32
【问题描述】:

我有一个标签栏应用程序。 这是启动代码

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    // Override point for customization after application launch.
    [self.window makeKeyAndVisible];



    self.tabBarController=[[UITabBarController alloc] init];


    StartViewController *startViewController=[[StartViewController alloc] initWithNibName:@"StartViewController" bundle:nil];
    NavRootViewController *navRootViewController=[[NavRootViewController alloc] initWithNavControllerWithSubViewController:startViewController];

    HelpViewController *helpViewController=[[HelpViewController alloc] initWithNibName:@"HelpViewController" bundle:nil];

    SettingsViewController *settingsViewController=[[SettingsViewController alloc] initWithNibName:@"SettingsViewController" bundle:nil];

    AboutUsViewController *aboutUsViewController=[[AboutUsViewController alloc] initWithNibName:@"AboutUsViewController" bundle:nil];

    [self.tabBarController setViewControllers:[NSArray arrayWithObjects: navRootViewController, helpViewController, settingsViewController, aboutUsViewController, nil]];



    [[UIApplication sharedApplication] setStatusBarHidden:YES];
    self.window.backgroundColor = [UIColor whiteColor];
    self.window.rootViewController=self.tabBarController;

使用 4 个标签栏标签启动的应用程序。 在用户按下第一个选项卡的导航控制器的根视图控制器中的开始按钮后调用此操作

-(IBAction)startPressed:(id)sender
{
    NSLog(@"startPressed: called");


    RootViewController *vController=[[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil];
    [self.navigationController pushViewController:vController animated:YES];

}

这很好用,但我需要为我的RootViewController 隐藏标签栏 属性hidesBottomBarWhenPushed 不起作用。 请帮帮我,怎么办?

【问题讨论】:

  • 将您的根视图显示为 modalviewcontroller。这将隐藏其下方的 tabBar。
  • 你在哪里分配了 hidesBottomBarWhenPushed?
  • @iPhoneDeveloper 如果我调用[self presentModalViewController:vController animated:YES] 标签栏仍然可见。有什么问题。我做错了什么?
  • @iPhoneDeveloper 我解决了这个问题。请单独回答您的评论。
  • 是的,你必须在窗口而不是 tabBar.m 的视图控制器上添加模态视图,给出下面的答案。

标签: iphone objective-c ios uitabbarcontroller uitabbar


【解决方案1】:

希望对你有帮助:

- (void)viewWillAppear: (BOOL)animated 
{ 
    self.hidesBottomBarWhenPushed = YES; 
}

【讨论】:

    【解决方案2】:

    是的,你必须在窗口而不是 tabBar 的 viewcontroller 上添加 modalview。 尝试类似.. 制作 AppDelegate 的对象,例如: AppDelegate *appDelegate=[[UIApplication sharedApplication]delegate]; 然后在下一行添加

    [appDelegate.window.rootviewcontroller.view presentModalViewController:vController animated:YES];
    

    或者在tabBar的firstviewcontroller的viewDidAppear中添加你的代码[self presentModalViewController:vController animated:YES]

    你做了什么来解决这个问题??我也想知道。

    【讨论】:

      【解决方案3】:

      如果您不希望主视图显示标签栏,则不应将其推送到导航控制器上。这样做会导致应用程序假定这个新控制器是导航层次结构的一部分。最好的解决方案可能是在 RootViewController 上启动您的应用程序,然后以模态方式呈现导航控制器。完成导航控制器后,让它自己调用dismissModalViewController

      【讨论】:

      • 有点难懂:(
      • 为避免误解,我将再次解释层次结构。
      • 应用程序从标签栏开始,有 4 个标签,第一个标签被选中。
      • 应用程序从带有 4 个选项卡的选项卡栏开始,第一个选项卡被选中。这是UINavigationController,根为StartViewController。接下来我该怎么办?我需要一个导航栏来移动视图控制器但是标签栏必须隐藏在除第一个标签之外的第一个标签中的每个视图控制器中。所以要切换到另一个选项卡,我需要返回 StartViewController 并切换到另一个选项卡。
      • 这听起来像是糟糕的应用程序设计;这不是标签栏控制器的用途。但是,如果您真的非常想让您的程序像这样工作,请查看 iPhone 开发人员的评论。
      【解决方案4】:

      使用此代码解决:

      -(IBAction)startPressed:(id)sender
      {
          NSLog(@"startPressed: called");
      
          RootViewController *vController=[[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil];
          UINavigationController *navController=[[UINavigationController alloc] initWithRootViewController:vController];
          [vController setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
          [((AppDelegate *)[UIApplication sharedApplication].delegate).tabBarController presentModalViewController:navController animated:YES];
      }
      

      感谢@iPhone 开发者

      【讨论】:

        【解决方案5】:
        UIViewController *nextViewController = [[UIViewController alloc] initWithNibName:@"NextViewController" bundle:[NSBundle mainBundle]];
        
        // hide UITabbarController
        nextViewController.hidesBottomBarWhenPushed = YES;
        
        [self.navigationController pushViewController:nextViewController animated:YES];
        [nextViewController release];
        

        【讨论】:

          猜你喜欢
          • 2011-11-07
          • 1970-01-01
          • 2018-01-18
          • 2016-05-27
          • 1970-01-01
          • 2015-01-03
          • 1970-01-01
          • 2023-03-05
          • 2016-05-27
          相关资源
          最近更新 更多