2017-10-05 46 views
0

我正在嘗試使用UIAppearance來爲我的應用程序創建主題。如何使UIAppearance代理適用於以編程方式創建的視圖?

說我想我所有的UILabel的文本是橙色的。我寫道:

UILabel.appearance(whenContainedInInstancesOf: [UIView.self]).textColor = .orange 

但我意識到:

  • 這個工作對通過界面生成器中創建的每個UILabel
  • 這對編程創建的任何UILabel不起作用。它們默認顯示爲黑色

任何想法如何強制以編程方式創建實例爲橙色?

PS:我也試過:UILabel.appearance().textColor = .green這不是我想要的,但它也不起作用。

+0

實際上'UILabel.appearance()。textColor'應該可以工作。你什麼時候調用這個方法? –

回答

0

經過一番搜索...

顯然,事實證明在Interface Builder創建的UI元素(如標籤).appearance()設置的影響是不是真的故意的,並可能是不可靠的。

事實上,文件似乎相當混亂和誤導。

爲了支持外觀定製,一個類必須符合UIAppearanceContainer協議,並且相關訪問器方法必須標記爲UI_APPEARANCE_SELECTOR。

即採用UIAppearance協議唯一的類是

  • UIBarItem
  • UIView

並且採用UIAppearanceContainer協議唯一的類是

  • UIPopoverController
  • UIPresentationController
  • UIView
  • UIViewController

所以......最好的選擇可能是子類的標籤。

+0

令人失望的答案,但仍然是最好的。謝謝。 :) –

0

一個相關的答案可以在這裏找到:How to default UILabel Font and Size using Swift

從該鏈接: 「UIAppearance只允許您設置了標誌與Objective-C的頭文件UI_APPEARANCE_SELECTOR屬性。由於的UILabel沒有這樣的性質,它不能與UIAppearance病急亂投醫「

也:https://developer.apple.com/documentation/uikit/uiappearance

」的iOS應用,用於在視圖進入窗口的外觀改變,也不會改變這已經是一個視圖的外觀在窗口中。要改變這是目前在一個窗口視圖的外觀,從視圖層次「從這裏

也:trouble with UIAppearance and UIButton subclassing

」刪除視圖,然後把它放回去。它的工作這樣的原因是因爲外觀當視圖添加到視圖層次結構時應用屬性,並且在將視圖添加到視圖層次結構之前應用了筆尖定義的屬性。「

我嘗試設置標籤的外觀,視圖控制器,然後以編程方式將該視圖控制器添加到層次結構中,但沒有運氣。