在选定的标签栏项目上设置文本颜色

Posted

技术标签:

【中文标题】在选定的标签栏项目上设置文本颜色【英文标题】:Setting text-color on selected tab bar item 【发布时间】:2010-12-04 06:22:39 【问题描述】:

我创建了一个标签栏应用程序。我有四个标签;在选定的选项卡上,我需要为选项卡标题设置红色。我该怎么做?

提前致谢。

【问题讨论】:

【参考方案1】:

现在可以使用 UIAppearance 协议 (ios5+),而且实际上非常简单。

[UITabBarItem.appearance setTitleTextAttributes:@
        UITextAttributeTextColor : [UIColor greenColor]  forState:UIControlStateNormal];

[UITabBarItem.appearance setTitleTextAttributes:@
        UITextAttributeTextColor : [UIColor purpleColor]      forState:UIControlStateSelected];

请原谅可怕的颜色!

【讨论】:

感谢您的回答!对于 iOS7+,UITextAttributeTextColor 已被弃用,您现在可以使用 NSForegroundColorAttributeName。【参考方案2】:

任何正在寻找 Swift 4 解决方案的人..

UITabBarItem.appearance().setTitleTextAttributes([NSAttributedStringKey.foregroundColor: .red], for: .selected)

【讨论】:

【参考方案3】:

这最终对我有用:

1)所选文字颜色

[[UIView appearance] setTintColor:someColor];

2)未选中的文本(也改变图像颜色)

[[UITabBar appearance] setTintColor:anotherColor];

【讨论】:

【参考方案4】:

只是为了澄清一点……

如果您想更改所有标签栏项目的外观,请使用:

Objective-C

[[UITabBarItem appearance] setTitleTextAttributes:@UITextAttributeTextColor :[UIColor someColor] forState:UIControlStateSelected];

斯威夫特

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

但是,如果您只想设置单个项目的外观,请这样做:

Objective-C

[self.tabBarItem setTitleTextAttributes:@UITextAttributeTextColor :[UIColor someColor] forState:UIControlStateSelected];

斯威夫特

tabBarItem.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.someColor()], forState: .Selected)

注意tabBarItemUIViewController 上的属性。这意味着虽然每个UIViewController 都有此属性,但它可能不是您要查找的tabBarItem。当您的视图控制器包含在 UINavigationController 中时,通常会出现这种情况。在这种情况下,访问导航控制器上的 tabBarItem 而不是其根(或其他)视图控制器中的那个。

【讨论】:

【参考方案5】:

这是快速版本:-

    for item in self.mainTabBar.items! 

    let unselectedItem: NSDictionary = [NSForegroundColorAttributeName: UIColor.whiteColor()]
    let selectedItem: NSDictionary = [NSForegroundColorAttributeName: UIColor.whiteColor()]
    item.setTitleTextAttributes(unselectedItem as? [String : AnyObject], forState: .Normal)
    item.setTitleTextAttributes(selectedItem as? [String : AnyObject], forState: .Selected)

    

【讨论】:

【参考方案6】:

如果我正确理解您的问题,您想自定义UITabBarItems 上的文本颜色。不幸的是,它真的没有那么灵活。如果您打算这样做(除非您在专业人士的帮助下仔细考虑过设计,否则我建议您不要这样做!),您必须做一些非常可怕的事情才能让它发挥作用。

我建议遍历UITabBar 的子视图(尽可能多的级别),并寻找UILabel 对象。如果你找到一些,你可以改变它们的颜色。如果你不这样做,那意味着它的实现方式不同(可能在某处的-drawRect: 方法中);如果发生这种情况,你真的应该放弃。

无论你决定做什么,祝你好运。

【讨论】:

【参考方案7】:

-drawRect: 可以做到这一点,但这样做会大大增加您的应用被 App Store 拒绝的机会

【讨论】:

什么? Drawrect 是布局 UIView 的标准方法。

以上是关于在选定的标签栏项目上设置文本颜色的主要内容,如果未能解决你的问题,请参考以下文章

标签栏控制器中标签栏项目的不同颜色

如何在情节提要上更改标签栏背景颜色和标签栏项目颜色

如何禁用标签栏项目以及如何更改禁用项目的颜色和透明度

在情节提要中更改选项卡栏项目选定的颜色

如何检查选定的标签栏

自定义 iOS 标签栏选定颜色