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

E-R*_*die 28 interface-builder ios swift ios8

细节

我正在WWDC 2014上观看Session 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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

日志

我注意到这些属性被添加到用户定义的运行时属性(在Identity Inspector下).现在我期待的是当我运行代码以保持这些改变时我用特定的视图.

我运行应用程序,视图不加载用户定义的运行时属性,并在输出给出此错误(不崩溃):

Unknown class MyClass in Interface Builder file
Failed to set (cornerRadius) user defined inspected property on (UIView)
Run Code Online (Sandbox Code Playgroud)

是什么导致应用程序不加载我在Identity Inspector下添加的用户定义的运行时属性

Kos*_*val 41

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

问题 -

Interface Builder文件中的未知类MyClass

是指Interface Builder无法找到某个类.您设置了应用程序中不存在的错误.
您的customView类MyView只是在您拥有的Interface Builder中MyClass

在此输入图像描述

修复解决方案 -

  • 在您的情况下,在界面生成器中设置正确的类 MyView
  • 检查可设计状态.它应该是最新的,如果它不是什么是错的.

在此输入图像描述

此外,如果您决定删除客户Designable,您应该

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

在此输入图像描述


Sur*_*gch 23

基于问题标题,一些人可能会遇到一个稍微不同的问题(就像我一样).如果你

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

然后你可能会得到类似的错误

无法在[您的自定义视图]上设置(xxx)用户定义的检查属性...:此类与密钥[xxx]不符合密钥值编码.

解决方案是删除旧属性.

在此输入图像描述

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

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