我在自定义视图上创建了一个@ IBDesignable ,以便从IB设置属性。但是我觉得这个课程不符合关键值编码,尽管我班上有这个属性。
@IBDesignable class ExclusiveSelectorView: UIView {
@IBInspectable var cellWidth: CGFloat?
}
无法在(Test.ExclusiveSelectorView)上设置(cellWidth)用户定义的检查属性:[setValue:forUndefinedKey:]:此类与密钥cellWidth不符合密钥值编码。
答案 0 :(得分:9)
您无法将基元定义为@IBInspectable
的可为空。
当您尝试这样做并设置其中一个属性的值时,您将在IBDesignable时间收到以下警告:
@IBDesignable类TestDesignable IB Designables:忽略关键路径的用户定义的运行时属性" testInt"在" TestDesignable"的实例上。尝试设置其值时遇到异常:[setValue:forUndefinedKey:]:此类不是键testInt的键值编码兼容。
在运行时,您将收到以下错误:
无法在(TestDesignable)上设置(testInt)用户定义的检查属性:[setValue:forUndefinedKey:]:此类与关键testInt不符合键值编码。
要修复它,请将其从可选项更改为非可选项,并为其指定一些默认值。
无效:
@IBDesignable class TestDesignable: UIView {
@IBInspectable var testInt: Int? = nil // crash
@IBInspectable var testFloat: CGFloat? = nil // crash
@IBInspectable var testPoint: CGPoint? = nil // crash
@IBInspectable var testColor: UIColor? = nil
}
有效:
@IBDesignable class TestDesignable: UIView {
@IBInspectable var testInt: Int = 0
@IBInspectable var testFloat: CGFloat = 0
@IBInspectable var testPoint: CGPoint = .zero
@IBInspectable var testColor: UIColor? = nil
}