如何获取选中的TabBar项目?

时间:2014-04-28 08:53:59

标签: ios

我经历了一些问题并发现了这个:

NSLog(@"selected tab index => %d",self.tabBarController.tabBar.selectedItem.tag);

但是这总是返回0。 我做错了什么?

AppDelegate中的代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    // Assign tab bar item with titles
    UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
    UITabBar *tabBar = tabBarController.tabBar;
    UITabBarItem *tabBarItem1 = [tabBar.items objectAtIndex:0];
    UITabBarItem *tabBarItem2 = [tabBar.items objectAtIndex:1];
    UITabBarItem *tabBarItem3 = [tabBar.items objectAtIndex:2];    
    return YES;
}

编辑:

我想做这样的事情:

if(self.tabBarController.tabBar.selectedItem.tag == 0)
{
    [[UITabBar appearance] setSelectedImageTintColor:[UIColor orangeColor]];
}   
else     if(self.tabBarController.tabBar.selectedItem.tag == 1)
{
    [[UITabBar appearance] setSelectedImageTintColor:[UIColor blueColor]];
}   

4 个答案:

答案 0 :(得分:2)

您必须将标记值分配给Storyboard Editor中的项目,或者以编程方式将其分配给零。

答案 1 :(得分:2)

试试吧:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
NSLog(@"%d",tabBarController.selectedIndex); //2147483647, will return tab 0
tabBarController.selectedIndex = 1;
NSLog(@"%d",tabBarController.selectedIndex); // will return 1
return YES;
}

获得它:

//my comment : be sure that self.tabBarController is tabBarController from your appDelegate
if(self.tabBarController.selectedIndex == 0)
{
[[UITabBar appearance] setSelectedImageTintColor:[UIColor orangeColor]];
}   
else if(self.tabBarController.selectedIndex == 1)
{
[[UITabBar appearance] setSelectedImageTintColor:[UIColor blueColor]];
}   

答案 2 :(得分:0)

您应该在故事板部分解决此问题。选择您的UITabBarItem并转到其属性。转到选项"标记"并设置值(默认情况下全部设置为0值)

答案 3 :(得分:0)

原始问题询问如何使用 TAG 获取/设置UITabBarItem。我在这里看不到真正的答案。

标记 IS 使用的价值更高,特别是如果您想要保存或者记住"该值是为了能够恢复" last"在将来的会话中选择选项卡。如果用户从 更多菜单 重新排列选项卡,则TabBar上任何viewController的索引都可以更改,而如果应用程序设计得当,则标签不会更改。

获取当前所选TabBarItem的标记:

_tabBarController.tabBar.selectedItem.tag;

从值中恢复/设置它:

unsigned lastSelectedIndex = [[userSettings objectForKey:SavedTabLastViewedKey] unsignedIntValue];
for(UIViewController *vc in _tabBarController.viewControllers) {
    if(vc.tabBarItem.tag == lastSelectedIndex) {
        _tabBarController.selectedViewController = vc;
        break;
    }
}