如何不让按钮仅在 UITabBar 的 5 个选项卡中的 3 个中显示 UINavigationBar?

Posted

技术标签:

【中文标题】如何不让按钮仅在 UITabBar 的 5 个选项卡中的 3 个中显示 UINavigationBar?【英文标题】:How no make a button show UINavigationBar only in 3 of 5 tabs in UITabBar? 【发布时间】:2010-03-25 08:48:10 【问题描述】:

我有一个应用程序,其中有一个带有 5 个选项卡的 UITabBar。当用户摇动设备时,我希望 UINavigationBar 推送 UIImageView。当我显示 UIImageView 时,我需要隐藏选项卡和导航栏。之后,当用户点击 UIImageView 时,NavBar 再次出现,用户可以转到 UIImageView 的父视图。我让导航栏看起来像这样:

[[self navigationController] setNavigationBarHidden:NO animated:YES];

但是在两个选项卡中我必须让导航栏出现,这样用户可以切换到 UIImageView 的 parentView,然后,当父视图出现时,隐藏导航栏。我该怎么做?

【问题讨论】:

【参考方案1】:

我认为你应该设置一个 UITabBarController 委托并实现这个方法:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController

    // Put real logic here
    BOOL shouldHideNavBar = (viewController == myViewController1 || viewController == myViewController4);
    [[self navigationController] setNavigationBarHidden:shouldHideNavBar animated:YES];

【讨论】:

XCode 给出错误“myViewController1 之前的预期表达式” 我已经设法通过创建每个 UIViewController 类的对象并将它们而不是 myViewController1 和 myViewController4 来消除错误,但它不起作用。导航栏原地不动。 如何做到最好取决于您应用的结构。确保某些保留对视图控制器的引用的对象是 UITabBarController 的委托。然后检查作为 viewController 传递给此委托方法的内容,如果它是导航控制器,请将 [self navigationController] 替换为 (UINavigationController *) viewController。我现在无法验证确切的行为,但这很有可能。【参考方案2】:

这比我想象的要容易。我只需要放

- (void)viewDidAppear:(BOOL)animated 
    [self.navigationController setNavigationBarHidden:YES animated:NO]; 
    [super viewDidAppear:animated];

【讨论】:

以上是关于如何不让按钮仅在 UITabBar 的 5 个选项卡中的 3 个中显示 UINavigationBar?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法调整 UITabBar 按钮项的宽度以适应屏幕上超过 5 个按钮?

仅自动旋转 UITabBar 内的一些选项卡? (iOS 5)

第二个选项卡的 UITabbar 项目标题/名称消失

UITabbar 仅在横向

配置超过 16 个项目的 UITabBar

如何在 viewController 中使用 UITabbar?