我正在编写一个包含多个目标的应用,并希望单独更改每个目标的默认色调颜色。我有一个包含每个目标常量的文件,包括色调颜色的定义kTintColor
。
这就是我试图做的事情:
self.window?.tintColor = kTintColor
UIView.appearance().tintColor = kTintColor
色调颜色随着我的想法而改变,但它会引起另一个问题:
在我的一些观点中,我需要更改单个UIBarButtonItem
的色调,而其他人保持全局色调。
这可以通过致电self.barBtnX.tintColor = ...
来实现
如果我在storyboard文件中使用全局色调颜色集,则按预期工作。但是,在更改AppDelegate中的色调颜色后,它将停止工作。
还有其他办法吗?
修改
我可以更改每个目标的全局色调颜色,但在我这样做之后,我再也无法更改单个UIBarButtonItem
的色调颜色。我想知道是否有办法实现这两个目标。
答案 0 :(得分:0)
首先,您可以创建一个字典,每个键/值对都是目标名称/色调颜色值。
var TintColorDictionary:NSDictionary = [
"target_name_1": "tint_color_1",
"target_name_2": "tint_color_2",
"...": "..."
];
然后,看看这里:How to get a target name in iOS。
然后只需传入目标名称并获得你的色彩颜色!
祝你好运!答案 1 :(得分:0)
我找到了解决问题的方法。这是一个循序渐进的指南:
<强> TLDR:强>
不要改变色调颜色,改变图像渲染模式。
定义色彩
为每个目标添加名为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)
}