How to change the Color of text in UITabBarItem in iOS 5

末鹿安然 提交于 2019-12-17 07:12:18

问题


with more appearance control in iOS 5, how do we change the UITabBarItem text color ? from default white to other color ?

EDIT:working solution

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

回答1:


Do you mean this one? Keep in mind, this only works for iOS5.0 or later.

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's documentation on customizing appearance:

In iOS v5.0 and later, you can customize the appearance of tab bars by setting item label text attributes using appearance selectors declared by UIBarItem. You can also use the methods listed in “Customizing Appearance.” You can customize the appearance of all segmented controls using the appearance proxy (for example, [UITabBarItem appearance]), or just of a single tab bar. You can also provide finished selected and unselected images using the methods listed in “Managing the Finished Selected Image”; these methods, though, do not participate in the UIAppearance proxy API (see UIAppearance). UIKit does now provide any automatic treatment to finished images. For good results, you must provide finished selected and unselected images in matching pairs using setFinishedSelectedImage:withFinishedUnselectedImage:.

Edit: Here is another example using the UIAppearance system and the NSDictionary literal syntax:

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

Edit (by @JeremyWiebe): As of iOS 6, the dictionary keys have been changed to be the same as OS X uses:

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



回答2:


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



回答3:


UITextAttributeFont, UITextAttributeTextColor etc. are deprecated in iOS 7.0.

You have to use:

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



回答4:


Specifically for iOS 7, try using NSForegroundColorAttributeName instead of UITextAttributeTextColor




回答5:


I do not have enough reputation points to add a comment so I will add another answer here.

I have had the same problem and searched for the past hour and finally realized that my issue is because I didn't put the code into method viewWillAppear. Not sure if this is common sense as I just started with objective-c but thought this should be another piece of important information to the answer as the same code didn't work inside viewDidLoad.

According to this post, this code only works if put in the method viewWillAppear.




回答6:


Working solution for 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];
}


来源:https://stackoverflow.com/questions/8412010/how-to-change-the-color-of-text-in-uitabbaritem-in-ios-5

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!