【问题标题】:How can I check if an appearance property has been set?如何检查是否已设置外观属性?
【发布时间】:2015-05-31 08:23:12
【问题描述】:

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

假设我想做这样的事情:

self.lineWidth = appearance.lineWidth ? : kDefaultLineWidth;

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

【问题讨论】:

    标签: ios objective-c cocoa-touch uikit


    【解决方案1】:

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

    _lineWidth = kDefaultLineWidth;
    

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-27
      • 2013-09-17
      • 2011-11-03
      • 2013-06-14
      • 2018-10-01
      相关资源
      最近更新 更多