Ios7 从代码中获取全局着色颜色

Ios7 从代码中获取全局着色颜色,ios7,xcode5,tintcolor,Ios7,Xcode5,Tintcolor,有没有一种方法可以通过代码从我的项目中获取全局着色颜色?为了避免误解,我指的是全局着色颜色,我可以在文件检查器中设置。在应用程序代理中,您可以通过 UIColor *globalTint = [[[UIApplication sharedApplication] delegate] window].tintColor; Max的回答是正确的,但我发现您必须获得navigationController的窗口: self.navigationController.view.window.tintC

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

在应用程序代理中,您可以通过

UIColor *globalTint = [[[UIApplication sharedApplication] delegate] window].tintColor;

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

self.navigationController.view.window.tintColor = [UIColor redColor];
但是,请注意,如果您已经从故事板手动设置了tintColor,那么这将不起作用。如果您已经这样做,将使用Storyboard中的值。这件事我有点担心。我认为这段代码不应该被忽略,即使我们已经从故事板设置了tintColor。

简单

目标C:

UIColor *tintColor = [[self view]tintColor];
斯威夫特:

let tintColor = self.view.tintColor;
这将在应用程序上设置淡色。如果更改此属性,则应更新此属性。这假定您位于viewController或其子类中,并且未在该视图和窗口之间的某个superView中覆盖tintColor

更新:请注意,如果试图获取尚未添加到窗口的视图控制器的着色颜色,则该视图控制器将不会具有自定义着色颜色,因为该颜色是从窗口对象继承的。感谢@ManuelWa在评论中指出这一点

[UIApplication sharedApplication].delegate.window.rootViewController.view.tintColor

似乎有效。

Swift 4.x

[UIApplication sharedApplication].keyWindow.tintColor;
extension UIColor {
    static var tintColor: UIColor {
        get {
            return UIApplication.shared.keyWindow?.rootViewController?.view.tintColor ?? .red
        }
    }
}
textField.textColor = .tintColor
用法

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

这里我得到了视图的色调,但它不等于全局色调。全局色调应该是窗口的色调。这就是窗户。它适合我,或者你可以获得应用程序代理,从那里获得窗口,并再次获得色调。没有其他方法可以获得着色颜色。奇怪,因为我用你的解决方案得到蓝色,虽然我在文件检查器中调整了橙色,按钮的颜色是橙色。我猜你当时无法得到它。我只是在应用程序代理中设置windows色调,它作为全局色调工作。但据我所知,除此之外,全球色调没有API。这似乎不起作用<代码>[[self view]tintColor]确实有效。当viewController尚未打开时(例如,窗口的rootViewController的导航堆栈)使用此选项。如果您自己设置,它将返回系统的标准颜色,这可能不同于您的自定义颜色。最后更新答案!非常感谢。在应用程序代理上测试:
self.window?.rootViewController?.view.tintColor
。在UIAbbarController的视图中:
UIApplication.shared.delegate?.window?.rootViewController.view.tintColor
这将在使用UIScene的iPad/Catalyst上中断,因为在那里没有keyWindow