如何在iOS 5中更改UITabBarItem中的文本颜色

时间:2011-12-07 07:53:45

标签: iphone ios xcode uitabbarcontroller uitabbar

在iOS 5中有更多外观控制,我们如何更改UITabBarItem文本颜色?从默认白色到其他颜色?

编辑:工作解决方案

  [[UITabBarItem appearance] setTitleTextAttributes:
         [NSDictionary dictionaryWithObjectsAndKeys:
          [UIColor blackColor], UITextAttributeTextColor, 
          [UIColor whiteColor], UITextAttributeTextShadowColor, 
          [NSValue valueWithUIOffset:UIOffsetMake(0, 1)], UITextAttributeTextShadowOffset, 
          [UIFont fontWithName:@"Rok" size:0.0], UITextAttributeFont, 
          nil] 
                                              forState:UIControlStateNormal];

6 个答案:

答案 0 :(得分:38)

你是说这个吗?请记住,这仅适用于iOS5.0或更高版本。

if ([self.tabBarItem respondsToSelector:@selector(setTitleTextAttributes:)]) {
    NSLog(@"*** Support method(iOS 5): setTitleTextAttributes:");
    [self.tabBarItem setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
                                                [UIFont fontWithName:@"AmericanTypewriter" size:20.0f], UITextAttributeFont,
                                                [UIColor blackColor], UITextAttributeTextColor,
                                                [UIColor grayColor], UITextAttributeTextShadowColor,
                                                [NSValue valueWithUIOffset:UIOffsetMake(0.0f, 1.0f)], UITextAttributeTextShadowOffset,
                                                nil]];
}

Apple关于自定义外观的文档:

  

在iOS v5.0及更高版本中,您可以通过使用UIBarItem声明的外观选择器设置项目标签文本属性来自定义标签栏的外观。您还可以使用“自定义外观”中列出的方法。您可以使用外观代理(例如,[UITabBarItem外观])或单个选项卡栏自定义所有分段控件的外观。您还可以使用“管理完成的所选图像”中列出的方法提供已完成的选定图像和未选择图像;但是,这些方法不参与UIAppearance代理API(参见UIAppearance)。 UIKit现在为成品图像提供任何自动处理。为了获得良好的结果,您必须使用setFinishedSelectedImage:withFinishedUnselectedImage:。在匹配对中提供已完成的已选择和未选择的图像:。

编辑: 以下是使用 UIAppearance 系统和 NSDictionary 文字语法的另一个示例:

[[UITabBarItem appearance] setTitleTextAttributes:@{
                         UITextAttributeFont : [UIFont fontWithName:@"AmericanTypewriter" size:20.0f],
                    UITextAttributeTextColor : [UIColor blackColor],
              UITextAttributeTextShadowColor : [UIColor grayColor],
             UITextAttributeTextShadowOffset : [NSValue valueWithUIOffset:UIOffsetMake(0.0f, 1.0f)]}];

修改(由@JeremyWiebe撰写): 从iOS 6开始,字典键已更改为与OS X使用的相同:

NSShadow *shadow = [[NSShadow alloc] init];
shadow.shadowColor = [UIColor grayColor];
shadow.shadowOffset = CGSizeMake(0, 1.0);

[[UITabBarItem appearance] setTitleTextAttributes:@{
                         NSFontAttributeName : [UIFont fontWithName:@"AmericanTypewriter" size:20.0f],
              NSForegroundColorAttributeName : [UIColor blackColor],
                       NSShadowAttributeName : shadow }];

答案 1 :(得分:13)

[[UITabBarItem appearance] setTitleTextAttributes:@{
                             UITextAttributeFont : [UIFont fontWithName:@"HelveticaNeue-Bold" size:10.0f],
                        UITextAttributeTextColor : [UIColor colorWithRed:0/255.0 green:48/255.0 blue:92/255.0 alpha:1.0],}
                                         forState:UIControlStateNormal];

[[UITabBarItem appearance] setTitleTextAttributes:@{
                             UITextAttributeFont : [UIFont fontWithName:@"HelveticaNeue-Bold" size:10.0f],
                        UITextAttributeTextColor : [UIColor colorWithRed:0/255.0 green:138/255.0 blue:196/255.0 alpha:1.0],}
                                         forState:UIControlStateSelected];

答案 2 :(得分:10)

iOS 7.0中不推荐使用UITextAttributeFont,UITextAttributeTextColor等。

你必须使用:

NSFontAttributeName, NSParagraphStyleAttributeName, NSForegroundColorAttributeName, NSBackgroundColorAttributeName, NSLigatureAttributeName, NSKernAttributeName, NSStrikethroughStyleAttributeName, NSUnderlineStyleAttributeName, NSStrokeColorAttributeName,  NSStrokeWidthAttributeName, NSShadowAttributeName and NSVerticalGlyphFormAttributeName

答案 3 :(得分:4)

特别针对iOS 7,尝试使用NSForegroundColorAttributeName而不是UITextAttributeTextColor

答案 4 :(得分:1)

适用于iOS 7.0 +的工作解决方案:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
    [UIColor redColor], NSForegroundColorAttributeName,
    nil] forState:UIControlStateNormal];

    [[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
    [UIColor whiteColor], NSForegroundColorAttributeName,
    nil] forState:UIControlStateSelected];
}

答案 5 :(得分:0)

我没有足够的声誉点来添加评论,所以我会在这里添加另一个答案。

我遇到了同样的问题并搜索了过去一小时,最终意识到我的问题是因为我没有将代码放入方法 viewWillAppear 。不知道这是否是常识,因为我刚开始使用objective-c但是认为这应该是答案的另一条重要信息,因为相同的代码在viewDidLoad中没有工作。

根据this post,此代码仅在方法viewWillAppear中有效。