2016-03-21 11 views
1

破壊的な警告ボタンのスタイルに使用されているシステムの赤い色にはどのようにアクセスしますか?システムへのアクセス。破壊的な赤ボタンの色

たとえば、ボタンに使用されるデフォルトのスタイルの青色は、Swiftでlet systemBlueColor = view.tintColorでアクセスできます。これはUIColor(red: 0, green: 122, blue: 255, alpha: 1.0)に対応します。

破壊的な赤色は、UIColor(red: 255, green: 59, blue: 48, alpha: 1.0)と表示されていますが、デフォルトのview.tintColorメソッドと同様の方法でアクセスできますか?

RGBの解釈はデバイスやオペレーティングシステムによって異なる可能性があるので、デバイス/オペレーティングシステムに依存しない色にアクセスしたいと思います。

答えて

3

あなたが必要とする色を返します_systemDestructiveTintColorと呼ばUIColor上の文書化されていないクラスメソッドがあります:

let red = UIColor.performSelector("_systemDestructiveTintColor").takeUnretainedValue() 

色の所有権が移転されていないので、それは、あなたが上.takeUnretainedValue()を呼び出す必要があり、管理対象外のオブジェクトを返します私たち自身の目的に。このメソッドを使用しようとすると

任意の文書化されていないAPIと同じように、あなたは注意を取る必要があります。

if UIColor.respondsToSelector("_systemDestructiveTintColor") { 
    if let red = UIColor.performSelector("_systemDestructiveTintColor").takeUnretainedValue() as? UIColor { 
     // use the color 
    } 
} 

これと他の色はUIColor headerで見つけることができます。

+0

なぜ 'takeRetainedValue()'ですか?セレクタ名から判断すると、 'takeUnretainedValue()'でなければなりません。 –

+0

@MartinRこれがgetルールかcopyルールかどうかはわかりませんでした。私は答えを 'takeUnretainedValue'に変更します。 – JAL

+1

@MartinR "オブジェクトの所有権があなたに転送されていないため、スコープから外れたときにARCがオブジェクトを解放しないようにするために、takeUnretainedValueを使用します。うん、あなたは正しい。 – JAL

関連する問題