我在自定义视图上创建了@ IBDesignable,以便从IB设置属性.但是我觉得这个类不是符合关键值的编码,尽管我在班上有这个属性.
@IBDesignable class ExclusiveSelectorView: UIView {
@IBInspectable var cellWidth: CGFloat?
}
Run Code Online (Sandbox Code Playgroud)
无法在(Test.ExclusiveSelectorView)上设置(cellWidth)用户定义的检查属性:[setValue:forUndefinedKey:]:此类不是密钥cellWidth的密钥值编码兼容.
您无法将基元定义为可为空的基元@IBInspectable.
当您尝试这样做并设置其中一个属性的值时,您将在IBDesignable时间收到以下警告:
@IBDesignable类TestDesignable IB Designables:在"TestDesignable"实例上忽略关键路径"testInt"的用户定义的运行时属性.尝试设置其值时遇到异常:[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
}
Run Code Online (Sandbox Code Playgroud)
有效:
@IBDesignable class TestDesignable: UIView {
@IBInspectable var testInt: Int = 0
@IBInspectable var testFloat: CGFloat = 0
@IBInspectable var testPoint: CGPoint = .zero
@IBInspectable var testColor: UIColor? = nil
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2280 次 |
| 最近记录: |