在UITabBar中不选择任何选项卡

时间:2010-05-26 15:45:17

标签: iphone cocoa-touch uikit uitabbarcontroller

我正试图在我的应用程序中根本不选择任何标签。首先选择第一个选项卡,但我想取消选择它,这样就不会选择任何选项卡了。

不要问我为什么,这就是客户想要的方式!和合

感谢您的帮助!

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];

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

7 个答案:

答案 0 :(得分:7)

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

在这种情况下,下面的代码效果很好。

[tabBar setSelectedItem:nil];

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

  

'直接修改托管栏   由标签栏控制器不是   允许'。

换句话说,如果您想要实现这一点,您需要在没有控制器的情况下手动管理tabbar的例程。

答案 1 :(得分:2)

我刚刚遇到了这个问题,实际上非常简单:

tabBarController.selectedViewController = viewController;

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

答案 2 :(得分:1)

我终于设法使用以下代码执行此操作:

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

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

答案 3 :(得分:1)

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

-(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;
    }
}

答案 4 :(得分:0)

来自documentation

  

此视图控制器是其标签栏界面当前显示其自定义视图的控制器。指定的视图控制器必须位于viewControllers数组中。将新视图控制器分配给此属性会更改当前显示的视图,还会在选项卡栏中选择适当的选项卡。更改视图控制器还会相应地更新selectedIndex属性。此属性的默认值为nil。

所以,我认为你需要[rootController setSelectedViewController: nil];

<强>更新

澄清一下,

[self.tabBarController setSelectedViewController:nil];

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

答案 5 :(得分:0)

有更好的方法吗?

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 :(得分:0)

我认为rootController.tabBar.selectedItem = 0;

无论你尝试过什么都没错。 因为当您设置selectedItem=0时,请确保它将采用tabBarController的第一个tabBarItem。