【问题标题】:Select no tabs in a UITabBar在 UITabBar 中不选择任何选项卡
【发布时间】:2011-02-24 06:21:56
【问题描述】:

我试图在我的应用程序中完全不选择任何选项卡。起初第一个选项卡被选中,但我想取消选择它,所以根本不会选择任何选项卡。

不要问我为什么,这就是客户想要的!呵呵

感谢您的帮助!

PS:我已经试过了:

// rootController = UITabBarController    
rootController.tabBar.selectedItem = 0;
rootController.tabBar.selectedItem = nil;
[rootController setSelectedIndex:[rootController.items objectAtIndex:0]];
[rootController setSelectedIndex:nil];
[rootController setSelectedIndex:0];
// That one works : (but I can't select 0 or -1 for instance)
[rootController setSelectedIndex:2];

有什么想法吗?再次感谢!

【问题讨论】:

  • 您找到解决此问题的方法了吗?我也在寻找这个问题的解决方案,如果你找到了解决方案,请告诉我。

标签: iphone cocoa-touch uikit uitabbarcontroller


【解决方案1】:

来自documentation

这个视图控制器是标签栏界面当前显示的自定义视图。指定的视图控制器必须在 viewControllers 数组中。为该属性分配一个新的视图控制器会更改当前显示的视图,并在选项卡栏中选择适当的选项卡。更改视图控制器也会相应地更新 selectedIndex 属性。该属性的默认值为 nil。

所以,我假设你需要[rootController setSelectedViewController: nil];

更新:

澄清一点,

[self.tabBarController setSelectedViewController:nil];

preventing the selection of tabs 上的文档可能会有所帮助。

【讨论】:

  • 就像我在问题的代码中所说的那样:它不起作用,因此崩溃:2010-05-26 12:35:22.091 PremierSoins[8449:207] *** - [UITabBarController selectedViewController:]:无法识别的选择器发送到实例 0x4b43fb0 2010-05-26 12:35:22.093 PremierSoins[8449:207] *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“*** - [UITabBarController” selectedViewController:]: 无法识别的选择器发送到实例 0x4b43fb0'
  • 您问题中的代码绝不会提到selectedViewController:setSelectedIndex: 不是一回事。
  • 您还需要致电-setSelectedViewController:,而不仅仅是-selectedViewController:...
【解决方案2】:

如果您使用没有 UITabBarController 的 UITabBar 实例,您可以取消选择所有标签栏项目。

在这种情况下,下面的代码运行良好。

[tabBar setSelectedItem:nil];

如果 UITabBar 是 UITabBarController 的一部分,那么应用程序将崩溃并出现异常:

'直接修改管理的标签栏 通过标签栏控制器不是 允许。'

换句话说,如果您想完成这项工作,您需要在没有控制器的情况下手动管理标签栏的例程。

【讨论】:

    【解决方案3】:

    我终于设法使用以下代码做到了这一点:

            DefaultView *defaultView = [[DefaultView alloc]initWithNibName:@"DefaultView" bundle:[NSBundle mainBundle]];
            [self.tabBarController setSelectedViewController:nil];
            [self.tabBarController setSelectedViewController:defaultView];
    

    请注意,仅执行[self.tabBarController setSelectedViewController:nil]; 不会执行任何操作。你必须指定一个视图控制器。此视图控制器将显示为未选择 tabBar 图标。选择其他 TabBar 选项后,defaultView 将消失并加载所需的视图。

    【讨论】:

    • 这曾经可以工作,但从 iOS 5.0 开始就坏了。第三行代码会弹出如下错误:only a view controller in the tab bar controller's list of view controllers can be selected.
    【解决方案4】:

    我刚遇到这个问题,其实很简单:

    tabBarController.selectedViewController = viewController;
    

    这有点类似于 HG 的回答,但没有必要将选定的视图控制器设置为 nil。

    【讨论】:

    • 在哪里添加这一行?
    【解决方案5】:

    有更好的方法吗?

    use [self.tabBarController setSelectedViewController:nil],
    Warning : "-[UITabBarController setSelectedViewController:] only a view controller in the tab bar controller's list of view controllers can be selected."
    

    【讨论】:

      【解决方案6】:

      我认为rootController.tabBar.selectedItem = 0;

      无论你尝试了什么都是错误的。 因为当你设置selectedItem=0时,肯定会取tabBarController的第一个tabBarItem。

      【讨论】:

        【解决方案7】:

        最好随时更改所选图像并根据您的要求隐藏或显示视图。这是我的一段代码,可以帮助理解:

        -(void)viewWillAppear:(BOOL)animated{
            if ([[NSUserDefaults standardUserDefaults]integerForKey:@"flagAsk"]) {
                UITabBarItem *firstTab = [self.tabBarController.tabBar.items objectAtIndex:0];
                firstTab.selectedImage = [[UIImage imageNamed:@"Ask2"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
                        vieToHide.hidden=YES;
            }
            else{
                UITabBarItem *firstTab = [self.tabBarController.tabBar.items objectAtIndex:0];
                firstTab.selectedImage = [[UIImage imageNamed:@"Ask"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
                vieToHide.hidden=NO;
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-07-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-06-13
          • 2020-01-02
          • 2021-12-22
          相关资源
          最近更新 更多