我正在观看 2014年WWDC会议411 的视频,指的是" Interface Builder上的新功能"和我正在尝试如何创建框架,以使@IBDesignable
类在Storyboard中预览我的更改,而无需运行应用程序。
@IBInspectable
属性正确显示:
@IBDesignable
class MyView: UIView {
@IBInspectable var borderColor: UIColor = UIColor.clearColor() {
didSet {
layer.borderColor = borderColor.CGColor
}
}
@IBInspectable var borderWidth: CGFloat = 0 {
didSet {
layer.borderWidth = borderWidth
}
}
@IBInspectable var cornerRadius: CGFloat = 0 {
didSet {
layer.cornerRadius = cornerRadius
}
}
@IBInspectable var masksToBounds: Bool = false {
didSet {
layer.masksToBounds = masksToBounds
}
}
}
我注意到这些属性已添加到用户定义的运行时属性(在 Identity Inspector 下)。现在我期待的是当我运行代码以保持这些改变时我用特定的视图。
我运行应用程序并且视图没有加载用户定义的运行时属性,并在输出时出现此错误(不会崩溃):
Unknown class MyClass in Interface Builder file
Failed to set (cornerRadius) user defined inspected property on (UIView)
是什么导致应用程序无法加载我在 Identity Inspector 下添加的用户定义的运行时属性?
答案 0 :(得分:40)
代码是正确的。
声明@ IBDesignable
时,所有@IBInspectable
属性都将作为用户定义的运行时属性公开给Interface Builder。
问题 -
Interface Builder文件中的未知类MyClass
是否表示Interface Builder无法找到某个类。您设置了应用中不存在的类错误
您的customView类是 MyView
,但在Interface Builder中您有 MyClass
解决方法 -
MyView
如果您决定删除客户Designable,那么
答案 1 :(得分:23)
根据问题标题,有些人可能会遇到稍微不同的问题(就像我一样)。如果你
然后您可能会收到与
类似的错误无法在[您的自定义设置]上设置(xxx)用户定义的检查属性 查看] ...:此类不是密钥值编码兼容的密钥 [XXX]。
解决方法是删除旧属性。
打开您的类的Identity检查器,在User Defined Runtime Attributes下选择属性名称,然后按减号按钮( - )。
同样,这不是OP问题的答案,但它可能是来到这里的其他人问题的答案。
答案 2 :(得分:0)