2015-05-31 57 views
3

有沒有辦法檢查一個屬性是否在UIAppearance代理上設置?如何檢查外觀屬性是否已設置?

比方說,我想要做的事,如:

self.lineWidth = appearance.lineWidth ? : kDefaultLineWidth; 

如果線寬上的代理設置爲零,因爲從沒有被設置在所有這將是難以區分這將無法正常工作(假設它是一個CGFloat)。

回答

1

您不需要進行檢查;外觀系統將爲你照顧它。在你的初始化器,設置lineWidth到您的默認值使用直接訪問伊娃的而不是它的制定者:

_lineWidth = kDefaultLineWidth; 

如果外觀性已經爲lineWidth設置,這將被覆蓋。如果不是,它不會被覆蓋。

當您通過設置器設置lineWidth時,會出現問題。外觀系統會將該實例標記爲已定製,並且不會覆蓋您的更改。

來源:http://petersteinberger.com/blog/2013/uiappearance-for-custom-views/

有一個問題是,UIAppearance碎冰雞尾酒有默認外觀都制定者和曲目時,他們得到改變,讓UIAppearance不會覆蓋您的自定義。 [如果]我們在初始化程序中使用setter,...對於UIAppearance,現在看起來好像我們已經自己定製了這個類。課程:在初始化程序中,只能使用直接ivar訪問以符合UI_APPEARANCE_SELECTOR的屬性。

相關問題