获取未选择状态的uitabbaritem的颜色?

时间:2016-04-14 16:21:51

标签: objective-c uicolor uitabbaritem

我用未选择状态更改了uitabbaritem(文本+图像)的颜色。 我想知道是否有办法获得这种颜色?我知道我们可以使用[UITabBar外观] .selectedImageTintColor获得所选颜色但是对于未选择的颜色,我不知道是否可能。

提前致谢,

JC

2 个答案:

答案 0 :(得分:0)

UIColor *col = [UITabBar appearance].tintColor; 
UIColor *col2 = [UITabBar appearance].barTintColor;

通过这种方式,您可以获得标签栏的bartintColortintColor。这里tintColor是我认为的未经选择的颜色。试试这个。希望这会有所帮助:)

更新:

[[UITabBar appearance] setTintColor:[UIColor redColor]];
UIColor *clr =  [UITabBar appearance].tintColor;
self.screenTitleLabel.textColor = clr;

这是将screenTitleLabel文本颜色设置为红色。这意味着这将返回我设置的redcolor。试试吧。

答案 1 :(得分:0)

在使用以下代码之前,即使不调用任何外观API,也要查找UITabBarItem的实际颜色。它查询视图层次结构并使用第一个和第二个按钮来确定实际的UIColor。对于IOS9,它为selectedColor提供“UIDeviceRGBColorSpace 0 0.478431 1 1”(十六进制为#007aff),为inactiveColor提供“UIDeviceWhiteColorSpace 0.572549 1”(十六进制为#929292)。在未来的版本中,这当然可能会改变。要使用tintColors,appeareance等设置具体颜色,请使用findTabBarLabel()作为实际的UITabBar。

static UILabel* findTabBarLabel(UITabBar* tb,NSString* text)
{
  for (UIView* btn in tb.subviews) {
    if (![btn isKindOfClass:NSClassFromString(@"UITabBarButton")]) {continue;}
    for (UIView* sv in btn.subviews) {
      if (![sv isKindOfClass:NSClassFromString(@"UITabBarButtonLabel")]) {continue;}
      UILabel* l=(UILabel*)sv;
      if ([text isEqualToString:l.text]) {
        return l;
      }
    }
  }
  return nil;
}

static void retrieveTabBarSystemColors()
{
  UITabBarController* tc=[[UITabBarController alloc] init];
  UITabBarItem* it1=[[UITabBarItem alloc] initWithTitle:@"foo" image:nil tag:1];
  UIViewController* vc1=[[UIViewController alloc] init];
  vc1.tabBarItem=it1;
  UITabBarItem* it2=[[UITabBarItem alloc] initWithTitle:@"bar" image:nil tag:2];
  UIViewController* vc2=[[UIViewController alloc] init];
  vc2.tabBarItem=it2;
  tc.viewControllers=@[vc1,vc2];
  UITabBar* tb=tc.tabBar;
  UILabel* label1=findTabBarLabel(tb,@"foo");
  NSLog(@"Tab bar item active:%@",label1.textColor.description);
  UILabel* label2=findTabBarLabel(tb,@"bar");
  NSLog(@"Tab bar item inactive color:%@",label2.textColor.description);
}