gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:15:21 24 4
gpt4 key购买 nike

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

假设我想做这样的事情:

self.lineWidth = appearance.lineWidth ? : kDefaultLineWidth;

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

最佳答案

您不需要进行该检查;外观系统会为您处理。在您的初始化程序中,将lineWidth 设置为您的默认值使用直接ivar 访问 而不是它的setter:

_lineWidth = kDefaultLineWidth;

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

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

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

One gotcha is that UIAppearance swizzles all setters that have a default apperance, and tracks when they get changed, so that UIAppearance doesn’t override your customizations. [If] we use setters in the initializer, ...for UIAppearance it now looks as though we already customized the class ourselves. Lesson: Only use direct ivar access in the initializer for properties that comply to UI_APPEARANCE_SELECTOR.

关于ios - 如何检查外观属性是否已设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30555337/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com