如何检查是否已设置外观属性?

时间:2015-05-31 08:23:13

标签: ios objective-c cocoa-touch uikit

有没有办法检查是否已在UIAppearance代理上设置了属性?

假设我想做类似的事情:

self.lineWidth = appearance.lineWidth ? : kDefaultLineWidth;

如果在代理上将lineWidth设置为零,则无法正常工作,因为它与根本没有设置无法区分(假设它是CGFloat)。

1 个答案:

答案 0 :(得分:1)

你不应该做那个检查;外观系统将为您处理。在您的初始化工具中,使用直接ivar访问而不是其setter将lineWidth设置为默认值

_lineWidth = kDefaultLineWidth;

如果已为lineWidth设置了外观属性,则会覆盖此属性。如果没有,它将不会被覆盖。

当您通过其setter 设置lineWidth 时,会出现问题。然后,外观系统会将该实例标记为已定制,并且不会覆盖您的更改。

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

  

一个问题是,UIAppearance会调动所有具有默认外观的设置器,并跟踪它们何时被更改,以便UIAppearance不会覆盖您的自定义设置。 [如果]我们在初始化程序中使用setter,...对于UIAppearance现在看起来好像我们已经自己定制了这个类。课程:仅在初始化程序中对符合UI_APPEARANCE_SELECTOR的属性使用直接ivar访问