无法在(UIView)上设置(cornerRadius)用户定义的检查属性

时间:2014-10-29 10:20:34

标签: ios swift ios8 interface-builder

详细

我正在观看 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 下添加的用户定义的运行时属性

3 个答案:

答案 0 :(得分:40)

代码是正确的。
声明@ IBDesignable时,所有@IBInspectable属性都将作为用户定义的运行时属性公开给Interface Builder。

问题 -

  

Interface Builder文件中的未知类MyClass

是否表示Interface Builder无法找到某个类。您设置了应用中不存在的错误 您的customView类是 MyView ,但在Interface Builder中您有 MyClass

enter image description here

解决方法 -

  • 在您的案例MyView
  • 中,在界面生成器中设置正确的类
  • 检查可设计状态。它应该是最新,如果它不是出错的话。

enter image description here

如果您决定删除客户Designable,那么

  • 删除自定义类
  • 删除用户定义的运行时属性

enter image description here

答案 1 :(得分:23)

根据问题标题,有些人可能会遇到稍微不同的问题(就像我一样)。如果你

  • 添加了@IBInspectible
  • 然后在代码中删除它

然后您可能会收到与

类似的错误
  

无法在[您的自定义设置]上设置(xxx)用户定义的检查属性   查看] ...:此类不是密钥值编码兼容的密钥   [XXX]。

解决方法是删除旧属性。

enter image description here

打开您的类的Identity检查器,在User Defined Runtime Attributes下选择属性名称,然后按减号按钮( - )。

同样,这不是OP问题的答案,但它可能是来到这里的其他人问题的答案。

答案 2 :(得分:0)

在Indentity检查器中

添加用户定义的运行时属性

layer.cornerRadius - 输入字符串

first

转到Attibutes检查员并选择"剪辑子视图"

second