25

有没有办法通过代码从我的项目中获取全局色调颜色?为避免误解,我指的是全局色调颜色,我可以在文件检查器中设置它。

4

6 回答 6

32

简单的。

目标 C:

UIColor *tintColor = [[self view]tintColor];

迅速:

let tintColor = self.view.tintColor;

这应该会在应用程序上设置 tintColor。如果你改变它,这个属性应该得到更新。这假设您在 viewController 或其中的一个子类中,并且您没有覆盖此视图和窗口之间的某个 superView 中的 tintColor。

更新:请注意,如果您尝试获取尚未添加到窗口的视图控制器的色调颜色,那么它将没有自定义色调颜色,因为此颜色是从窗口对象继承的。感谢@ManuelWa 在评论中指出这一点。

于 2014-05-01T20:26:42.367 回答
32

在应用程序委托中,您可以通过

UIColor *globalTint = [[[UIApplication sharedApplication] delegate] window].tintColor;
于 2013-10-02T12:53:52.993 回答
2

Max的回答是正确的,但我发现你必须得到navigationController的窗口:

self.navigationController.view.window.tintColor = [UIColor redColor];

但是,请注意,如果您从 Storyboard 手动设置了 tintColor,这将不起作用。如果您这样做了,将使用 Storyboard 中的值。我已经向 Apple 提交了一个错误。我认为即使我们从 Storyboard 设置了 tintColor,也不应该忽略这段代码。

于 2013-10-05T02:23:27.060 回答
2
[UIApplication sharedApplication].delegate.window.rootViewController.view.tintColor

似乎工作。

于 2016-07-02T21:16:44.630 回答
1
[UIApplication sharedApplication].keyWindow.tintColor;
于 2016-09-09T08:00:03.523 回答
1

斯威夫特 4.x

extension UIColor {
    static var tintColor: UIColor {
        get {
            return UIApplication.shared.keyWindow?.rootViewController?.view.tintColor ?? .red
        }
    }
}

用法

textField.textColor = .tintColor
于 2018-04-26T09:45:13.727 回答