プロジェクトからコードでグローバルな色合いの色を取得する方法はありますか?誤解を避けるために、私はファイルインスペクターで設定できるグローバルな色合いの色を意味します。
アプリデリゲートでは、次の方法で設定できます
UIColor *globalTint = [[[UIApplication sharedApplication] delegate] window].tintColor;
簡単。
目的C:
UIColor *tintColor = [[self view]tintColor];
迅速:
let tintColor = self.view.tintColor;
これにより、アプリでtintColorが設定されます。変更すると、このプロパティが更新されます。これは、viewControllerまたはそのサブクラス内にいて、このビューとウィンドウの間のスーパービューでtintColorをオーバーライドしていないことを前提としています。
更新:ウィンドウに追加されていないView Controllerの色合いを取得しようとすると、この色はウィンドウオブジェクトから継承されるため、カスタムの色合いはありません。コメントでこれを指摘してくれた@ManuelWaに感謝します。
[UIApplication sharedApplication].delegate.window.rootViewController.view.tintColor
動作しているようです。
Swift 4.x:
extension UIColor {
static var tintColor: UIColor {
get {
return UIApplication.shared.keyWindow?.rootViewController?.view.tintColor ?? .red
}
}
}
使用法:
textField.textColor = .tintColor
[UIApplication sharedApplication].keyWindow.tintColor;
Maxの答えは正しいですが、navigationControllerのウィンドウを取得する必要があることがわかりました。
self.navigationController.view.window.tintColor = [UIColor redColor];
ただし、ストーリーボードから手動でtintColorを設定した場合、これは機能しないことに注意してください。ストーリーボードの値は、そうしている場合に使用されます。私は Appleにバグを提出した これについて。 StoryboardからtintColorを設定したとしても、このコードを無視してはいけないと思います。