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 和协议的主要内容,如果未能解决你的问题,请参考以下文章

IBInspectable 属性值未在 xib 中更新

配置 @IBInspectable 属性检查器控件

为啥标记为@IBInspectable 的属性不起作用?

IB_DESIGNABLE 和 IBInspectable 的用法

Sse IBInspectable 和 IB_DESIGNABLE 错误更改未显示在情节提要中?

具有 IBInspectable 颜色属性的子类 - 无法覆盖