IBInspectable 和协议
Posted
技术标签:
【中文标题】IBInspectable 和协议【英文标题】:IBInspectable and protocols 【发布时间】:2015-02-11 16:42:30 【问题描述】:我正在使用名为“LiveRendering”的新 Xcode 6 功能。 由于我需要在不同的自定义视图上大量使用一些可检查的属性,我想在协议中声明它们。
例如:
LiveRenderingTextAttributesProtocol(声明 textColor、textSize 的可检查属性 LiveRenderingBorderAttributesProtocol(声明borderStyle、borderColor、borderWidth的可检查属性)等等……
之后,每个自定义视图都会实现它所需的协议。
但我在 InterfaceBuilder“属性检查器”列上看不到我的可检查属性:/ 当我将这些属性的值定义为“使用定义的运行时属性”时,LiveRendering 运行良好,但我想在我的属性检查器列。
请问有解决这个问题的办法吗?
【问题讨论】:
【参考方案1】:协议定义了一组可选的或必需的方法和属性以符合要求,但它是负责实现它们的类。为了能够拥有可重用的基本 IBInspectable
属性,您可以拥有一个像 MyInspectableView
这样的超类,其中声明和实现了这些属性,因此您可以将其子类化并在所有这些属性之间共享这些 IBInspectables。
【讨论】:
太糟糕了:(事实上如果我有 4 种可检查的属性(文本属性(A),背景属性(B),边框属性(C),其他属性(D)),我需要创建 15 个超类以匹配所有可能性(A、B、C、D、AB、AC、AD、BC、BD 等)不可接受;所以我将直接在每个自定义视图上声明我的属性:/ @QLag 然后你可以做的是有一个超类为你需要的所有可检查属性(如文本属性、背景属性等)实现设置器,但不在界面中声明它们。然后子类可以只声明他们想要使用的属性,并且因为它们是该父类的子类,所以一切都应该正常工作。使用这种方法,您不会重复实现,而只是接口声明。以上是关于IBInspectable 和协议的主要内容,如果未能解决你的问题,请参考以下文章
IB_DESIGNABLE 和 IBInspectable 的用法