web-dev-qa-db-ja.com

コードからグローバルな色合いの色を取得する

プロジェクトからコードでグローバルな色合いの色を取得する方法はありますか?誤解を避けるために、私はファイルインスペクターで設定できるグローバルな色合いの色を意味します。

23
fahu

アプリデリゲートでは、次の方法で設定できます

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

簡単。

目的C:

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

迅速:

let tintColor = self.view.tintColor;

これにより、アプリでtintColorが設定されます。変更すると、このプロパティが更新されます。これは、viewControllerまたはそのサブクラス内にいて、このビューとウィンドウの間のスーパービューでtintColorをオーバーライドしていないことを前提としています。

更新:ウィンドウに追加されていないView Controllerの色合いを取得しようとすると、この色はウィンドウオブジェクトから継承されるため、カスタムの色合いはありません。コメントでこれを指摘してくれた@ManuelWaに感謝します。

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

動作しているようです。

2
nurider

Swift 4.x

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

使用法

textField.textColor = .tintColor
1
Ramis
[UIApplication sharedApplication].keyWindow.tintColor;
1
FunkyKat

Maxの答えは正しいですが、navigationControllerのウィンドウを取得する必要があることがわかりました。

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

ただし、ストーリーボードから手動でtintColorを設定した場合、これは機能しないことに注意してください。ストーリーボードの値は、そうしている場合に使用されます。私は Appleにバグを提出した これについて。 StoryboardからtintColorを設定したとしても、このコードを無視してはいけないと思います。

1
Enrico Susatyo