使用IBDesignable和prepareForInterfaceBuilder与UILabel

时间:2015-01-22 12:04:22

标签: ios swift interface-builder ibdesignable ibinspectable

我正在创建一个名为UIView的{​​{1}}子类。

其中有一个MyView(由于原因,这是在代码中添加的,而不是在InterfaceBuilder中。)

然后我在UILabel上有一个名为MyView的属性。

我想要的是让Interface Builder能够选择color,然后显示标签,并将字体设置为该颜色。

在我的代码中,我有......

color

IBInspectable

在IB中我可以看到那里的颜色属性,我可以设置它。令人讨厌的是,它采用默认值.clearColor(),但不是我在代码中设置的颜色。有办法解决这个问题吗?

IBDesignable

当我将视图放入InterfaceBuilder时,它显示了所有可检查的属性,但实际视图中没有显示任何内容。

当我运行它时一切正常。我希望能够在IB中获得一些工作(除了drawRect)。我发现明显缺乏文档。

修改 - 警告

我刚注意到我发现构建错误/警告说...

  

警告:IB Designables:忽略用户定义的关键路径的运行时属性" color"在" UIView"的实例上。尝试设置其值时遇到异常:[setValue:forUndefinedKey:]:此类不是密钥值的密钥值编码。

这可能会改变解决方案:)

3 个答案:

答案 0 :(得分:2)

我将您的问题中的代码复制到一个新的应用程序中,添加了视图并设置了属性,它运行得很好。

您看到的错误表明您在某些时候已将视图更改回身份检查器中的普通UIView(在这种情况下,用户定义的属性仍然存在)。

enter image description here

答案 1 :(得分:1)

设置颜色时,您需要使用didSet更新textLabel属性,如下所示

@IBInspectable var color: UIColor = UIColor.blackColor() {
    didSet {
        textLabel.textColor = color
    }
}

答案 2 :(得分:1)

我使用的是swift 2.0,在我的情况下缺少动态属性。最终代码:

@IBInspectable dynamic var radius:CGFloat = 2.0 {
    didSet {
     //   setNeedsDisplay()
        layer.cornerRadius = radius

    }
}

IB Designables 的构建过程中发现错误:http://lamb-mei.com/537/xcode-ibdesignables-ignoring-user-defined-runtime-attribute-for-key-path-bordercolor-on-instance-of-uiview-this-class-is-not-key-value-coding-compliant-for-the-key-bordercolor/