改变uitabbaritem的文字颜色

时间:2010-06-16 09:09:55

标签: iphone

任何人都可以帮助我解决这个奇怪的问题,无论如何都要将uitabbar项目的文本颜色从默认灰色更改为白色,将所选颜色更改为蓝色。

10 个答案:

答案 0 :(得分:74)

老问题,但我有一个在iOS 5以后支持的新答案(我也使用LLVM 4.0文字)

[[UITabBarItem appearance] setTitleTextAttributes:@{ NSForegroundColorAttributeName : [UIColor whiteColor] }
                                         forState:UIControlStateNormal];
[[UITabBarItem appearance] setTitleTextAttributes:@{ NSForegroundColorAttributeName : [UIColor blueColor] }
                                         forState:UIControlStateSelected];

答案 1 :(得分:11)

从iOS 7弃用

UITextAttributeTextColor 。改为使用 NSForegroundColorAttributeName

[[UITabBarItem appearance] setTitleTextAttributes:@{ NSForegroundColorAttributeName : [UIColor blackColor] }
                                             forState:UIControlStateNormal];

在Swift中

UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName : UIColor.blackColor()], forState: .Normal)

答案 2 :(得分:2)

编辑:以下不再是最佳做法,因为新的API已添加到iOS SDK

子类UITabBarController(在此示例中为CustomTabBarController)并将以下代码放在.m实现文件中:

@interface CustomTabBarController()

@property (nonatomic, retain) NSArray *tabTitleLabels;

@end


@implementation CustomTabBarController

@synthesize tabTitleLabels;

- (NSArray *)tabTitleLabels
{
    // Check if we need to update the tab labels 
    if ([tabTitleLabels count] != [self.viewControllers count])
        self.tabTitleLabels = nil;

    // Create custom tab bar title labels
    if (!tabTitleLabels)
    {
        tabTitleLabels = [[NSMutableArray alloc] init];

        for (UIView *view in self.tabBar.subviews)
        {      
            if ([NSStringFromClass([view class]) isEqualToString:@"UITabBarButton"])
            {
                for (UIView *subview in view.subviews)
                {                                    
                    if ([subview isKindOfClass:[UILabel class]])
                    {
                        UILabel *label = (UILabel *)subview;

                        UILabel *newLabel = [[UILabel alloc] init];
                        newLabel.font = label.font;
                        newLabel.text = label.text;
                        newLabel.backgroundColor = label.backgroundColor;
                        newLabel.opaque = YES;
                        newLabel.frame = CGRectMake(0, 0, label.frame.size.width, label.frame.size.height -1);    
                        [subview addSubview:newLabel];

                        [((NSMutableArray *)tabTitleLabels) addObject:newLabel];
                        [newLabel release];
                    }
                }
            }
        }      
    }

    return tabTitleLabels;
}

// Customize the desired colors here
- (void)recolorTabBarTitleLabels
{
    for (UILabel *label in self.tabTitleLabels)
    {
        label.textColor = [UIColor whiteColor];
        label.backgroundColor = [UIColor blackColor];
    }
    UILabel *selectedLabel = [self.tabTitleLabels objectAtIndex:self.selectedIndex];
    selectedLabel.textColor = [UIColor blueColor];            
    selectedLabel.backgroundColor = [UIColor colorWithWhite:.15 alpha:1];
}

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    [self recolorTabBarTitleLabels];
}

- (void)tabBarController:(UITabBarController *)theTabBarController didSelectViewController:(UIViewController *)viewController 
{   
    [self recolorTabBarTitleLabels];
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    self.tabTitleLabels = nil;
}

- (void)dealloc
{
    [tabTitleLabels release];
    [super dealloc];
}

@end

这可能晚了一年,但我希望我的代码可以节省一些工作!

注意:它不支持切换/切换新的标签栏项目,但您只需将tabTitleLabels重置为nil即可。

答案 3 :(得分:2)

它可能会帮助你

 UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.whiteColor()], forState: .Selected)

答案 4 :(得分:1)

UITabBarItem几乎不可自定义,所以如果必须,你可以:

  1. 通过迭代UITabBar的子视图,通过使用-[NSObject isKindOfClass:]查找标签并更改其颜色来实现背驮式。

  2. 创建您自己的UITabBar并滚动自定义标签栏项目。

  3. 尝试使用Three20的TTTabBar

  4. 等替代品

答案 5 :(得分:1)

要一次设置2 UIControlState的颜色,您可以使用union

UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName : UIColor.redColor()], forState: UIControlState.Selected.union(UIControlState.Highlighted))

答案 6 :(得分:1)

<强> Swift3

UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName : UIColor.brown], for: .normal) 

答案 7 :(得分:0)

查看this questionthis question的答案,但请注意,您的应用可能会因修改默认的标签栏组件而被拒绝。

答案 8 :(得分:0)

保持简单!

[[UITabBar appearance] setTintColor:[UIColor blackColor]];

答案 9 :(得分:0)

从iOS 10开始,可以在unselectedItemTintColor上设置UITabBar

tintColor的{​​{1}}不是selectedItem的颜色。

如果您想要查看任何项目的唯一值,您还可以直接与UITabBartabBarItem.titleTextAttributes(for:)一起设置项目tabBarItem.image(前面提到过)。