选中或突出显示时全局更改 UIBarButtonItem 文本颜色

Globally change UIBarButtonItem text color when selected or highlighted

我有 UIToolbar(在我的 UINavigationController 里面),上面有一些 UIBarButtonItem

工具栏是 blue (isTranslucent = false),按钮是 white。默认高亮颜色是gray,看起来很难看。

我找到的唯一解决方案是在 @IBAction 触摸事件中更改 UIBarButtonItemtintColor。但是我有很多 UIBarButtonItem 并且在每个 @IBAction.

中编写大量代码非常烦人

你知道如何全局更改它,或者至少,subclass UIBarButtonItem 定义一次并在所有地方使用这个 class 吗?

我用的是swift3,部署目标是iOS9+

您可以使用 appearance 全局更改颜色。在 didFinishLaunchingWithOptions 方法中添加下一行

UIBarButtonItem.appearance().setTitleTextAttributes(
    [NSForegroundColorAttributeName: UIColor.white], for: .selected)
UIBarButtonItem.appearance().setTitleTextAttributes(
    [NSForegroundColorAttributeName: UIColor.white], for: .highlighted)

你的 didFinishLaunchingWithOptions 函数在你的 AppDelegate 中 告诉代表启动过程几乎完成并且应用程序几乎准备好 运行。

您可以在 UIBarButtonItemUINavigationBar 上使用 appearance

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Text
    UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.green], for: .normal)
    UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.darkGray], for: .selected)

    // Images
    UINavigationBar.appearance().tintColor = UIColor.orange

    return true
}

结果:

Swift 4.2

UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedString.Key.font: UIColor.green], for: .normal)
UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedString.Key.font: UIColor.darkGray], for: .selected)