【问题标题】:Failed to set (cornerRadius) user defined inspected property on (UIView)无法在 (UIView) 上设置 (cornerRadius) 用户定义的检查属性
【发布时间】:2014-12-25 00:08:52
【问题描述】:

详情

我正在观看 Session 411 on WWDC 2014 的视频,其中提到了“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 下添加的用户定义的运行时属性

【问题讨论】:

  • 其他东西会导致您的问题,因为该代码按应有的方式完美运行 - 当我运行应用程序时,这些值会正确保存。我可以更改标准 attributes inspectoruser defined runtime attributes 部分下的所有值。
  • 这就是我刚才所说的:“当我运行应用程序时,这些值会被正确保存”,而你只是说同样的话“当我运行应用程序时app 我添加的属性工作正常”,我确定你的问题在这里,也许? (顺便说一句,我没有在控制台上收到任何警告消息)。
  • 你添加 QuartzCore 框架了吗?
  • @holex 我删除了评论,因为我无法编辑,所以我在这里写。我在 IB 上添加了属性,但是在应用程序运行时它们没有被加载。这就是我的意思。
  • Interface Builder 抱怨与视图关联的类在您的目标中不可用。 MyClass....您是想将其配置为“MyView”还是打错字?

标签: ios swift ios8 interface-builder


【解决方案1】:

在 Indentity 检查器中添加用户定义的运行时属性

layer.cornerRadius - 输入字符串

转到属性检查器并选择“剪辑子视图”后

【讨论】:

  • 在“用户定义的运行时属性”中应该是“数字”而不是“字符串”。
【解决方案2】:

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

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

那么你也可能会得到类似

的错误

无法在 [Your Custom] 上设置 (xxx) 用户定义的检查属性 视图] ...:这个类不符合键的键值编码 [xxx]。

解决方法是删除旧属性。

为您的类打开身份检查器,在用户定义的运行时属性下选择属性名称,然后按减号按钮 (-)。

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

【讨论】:

  • 它没有回答 OP 的问题,但你是添加这个答案的好人,因为它解决了我的问题!
【解决方案3】:

代码是正确的。
当您声明 @ IBDesignable 时,所有 @IBInspectable 属性都会作为用户定义的运行时属性暴露给 Interface Builder。

问题 -

Interface Builder 文件中的未知类 MyClass

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

解决方案-

  • 在界面生成器中设置正确的类,在你的情况下MyView
  • 检查可设计状态。它应该是 Up to date ,如果它不是有问题的话。

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

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

【讨论】:

  • 我想说,只需删除并再次添加类名,它应该可以工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-02
  • 1970-01-01
  • 1970-01-01
  • 2020-12-11
  • 2021-11-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多