更改每个目标的全局色调

Change global tint per target

我正在编写一个包含多个目标的应用程序,并且想单独更改每个目标的默认色调。我有一个包含每个目标常量的文件,包括色调颜色的定义 kTintColor.

这是我尝试做的:

self.window?.tintColor = kTintColor
UIView.appearance().tintColor = kTintColor

色调颜色按我的意愿改变,但它会导致另一个问题:
在我的某些观点中,我需要更改单个 UIBarButtonItem 的色调,而其他的则保持全局色调。 这是通过调用 self.barBtnX.tintColor = ...
实现的 如果我在我的故事板文件中使用全局色调颜色集,这将按预期工作。但是,在我的 AppDelegate 中更改色调后,它停止工作。

还有其他方法吗?

编辑:
我可以更改每个目标的全局色调颜色,但在我这样做之后,我不能再更改单个 UIBarButtonItem 的色调颜色。我想知道是否有办法同时实现。

首先,您可以制作一个字典,每个 key/value 对是一个目标 name/tint 颜色值。

var TintColorDictionary:NSDictionary = [
    "target_name_1": "tint_color_1",
    "target_name_2": "tint_color_2",
              "...": "..."
];

那么,看这里:How to get a target name in iOS.

然后只需传入目标名称并获取您的色调!

祝你好运!

我找到了解决问题的方法。以下是分步指南:

TLDR:
不要改变tint颜色,改变图像渲染模式。

定义色调颜色
为每个目标添加名为 Constants-TargetName.swift 的文件,并将其添加到相应目标的 buid 设置中。在该文件中定义了全局色调颜色(以及该目标的其他全局常量,如果需要的话)。
let kTintColor = UIColor(red: 0.0, green: 0.0, blue: 170.0/255.0, alpha: 1.0)

设置全局色调颜色
更改 AppDelegate.swift 中的全局色调颜色,在 application(didFinishLaunchingWithOptions):
UIView.appearance().tintColor = kTintColor

改变UIBarButtonItem
的颜色 将图像设置为要更改为的颜色。我的情况是,我有一个蓝色的全局色调,图像是灰色的。所以下面的代码在灰色和蓝色之间切换颜色。 不要更改单个 UIBarButtonItem 的色调颜色,而是更改其图像:

if globalTintColor {
  self.btn.image = UIImage(named: "ImgName")?.imageWithRenderingMode(.AlwaysTemplate)
} else {
  self.btn.image = UIImage(named: "ImgName")?.imageWithRenderingMode(.AlwaysOriginal)
}