在一个简单的ViewController中,我添加了一个UIButton.
我想使用“用户定义的运行时属性”.现在我添加了默认的Bool属性.
我想使用“用户定义的运行时属性”.现在我添加了默认的Bool属性.
按钮是@IBOutlet:
@IBOutlet var button:UIButton!
故事板中的链接已完成.
我的应用程序中没有其他内容.
我收到了这个错误:
2017-03-26 20:31:44.935319+0200 ISAMG[357:47616] Failed to set (keyPath) user defined inspected property on (UIButton): [<UIButton 0x15e3a780> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key keyPath.
我不明白我错过了什么.
编辑1
根据@timaktimak的建议,我创建了一个自定义的UIButton类:
@IBDesignable class ChoiceButton: UIButton { @IBInspectable var keyPath: Bool! { didSet { print("didSet viewLabel,viewLabel = \(self.keyPath)") } } required init(coder aDecoder: NSCoder) { super.init(coder: aDecoder)! } }
错误是一样的:
2017-03-26 22:32:27.389126+0200 ISAMG[429:71565] Failed to set (keyPath) user defined inspected property on (ISAMG.ChoiceButton): [<ISAMG.ChoiceButton 0x14e8f040> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key keyPath.
解决方法
好吧,你的按钮没有一个名为keyPath的属性来设置它.
用户定义的运行时属性用于在Interface Builder中简单地设置属性值.
您可以使用每个UIButton都具有的标准属性,例如backgroundColor:
或者,您可以创建自定义UIButton子类,向其添加属性,然后将按钮的类设置为创建的自定义子类,并在“用户定义的运行时属性”部分中设置属性值.
例如,您可以查看此答案,它包含一个具有用户定义的运行时属性的自定义类的示例:https://stackoverflow.com/a/24433125/3445458
编辑:确保您没有为该类型使用可选(或隐式展开的可选),它不适用于用户定义的运行时属性(我猜因为Interface Builder不知道该值是否可以设置为nil,并且所以在选项中显示它或不).
所以你做不到
var keyPath: Bool!
相反,你只能这样做
var keyPath: Bool = false
或者不使用默认值,而是在构造函数中设置它.由于某种原因,它使用可选的String(在示例中它们使用可选的String),但它不使用可选的Bool.总而言之,不要过多使用或担心用户定义的运行时属性,在代码中设置默认值会更清楚!
希望这可以帮助!祝好运!