4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

UIAppearanceの優先度

Last updated at Posted at 2020-02-14

UIAppearance の基礎

これですべての UILabeltextColor が茶色に変わります。
(現実的には UILabeltextColorUIAppearance で設定するのは稀だと思いますが、あくまでサンプルとして)

UILabel.appearance().textColor = .brown

特定のView上にあるUILabelのtextColorを変える

View階層が1つだけの時

すべての ViewA 上の UILabel を変えたいなら、こんなふうに書けば良いですね。

UILabel.appearance(whenContainedInInstancesOf: [ViewA.self]).textColor = .red

View階層が2つ以上の時

SampleViewController 上の ViewA 上の UILabel だけを変えたい時など、
階層が2つ以上の時は、対象となるViewから親View/ViewControllerを順に配列の要素に加えます。

UILabel.appearance(whenContainedInInstancesOf: [ViewA.self, SampleViewController.self]).textColor = .red

優先度

例えば以下のような階層構造の時

SampleViewController
┣ UILabel
┣ ViewA
┃ ┗ UILabel
┗ ViewB
  ┗ ViewA
    ┗ UILabel

このように設定するとどうなるでしょうか。

UILabel.appearance().textColor = .brown
UILabel.appearance(whenContainedInInstancesOf: [SampleViewController.self]).textColor = .magenta
UILabel.appearance(whenContainedInInstancesOf: [ViewA.self]).textColor = .blue
UILabel.appearance(whenContainedInInstancesOf: [ViewB.self, SampleViewController.self]).textColor = .red

この場合、より外側の要素での指定が優先され、以下のように解決されます。

UIAppearance_demo.png

ViewA 上の UILabelblue にはならず、
SampleViewController 上の UILabelmagenta にする処理が優先されます。

SampleViewController 上の ViewBUILabelred にする処理は、指定した順に解決され問題なく実行されます。

参考

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?