Ich habe mir das Video von Session 411 auf WWDC 2014 angesehen unter Bezugnahme auf " Was ist neu in Interface Builder ", und ich habe versucht, Frameworks zu erstellen, um @IBDesignable
-Klassen zu erstellen, um eine Vorschau meiner Änderungen im Storyboard anzuzeigen ohne die Anwendung ausführen zu müssen.
Die @IBInspectable
-Eigenschaften werden korrekt angezeigt, wenn ich meine Klasse einer bestimmten Ansicht hinzufüge, und die Ansicht mit dem folgenden Code korrekt wiedergeben:
@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
}
}
}
Ich habe festgestellt, dass diese Attribute unter Benutzerdefinierte Laufzeitattribute (Under Identity Inspector ) hinzugefügt wurden. Was ich jetzt davon erwarte, ist, wenn ich den Code ausführte, um diese Änderungen in einer bestimmten Ansicht zu behalten.
Ich führe die Anwendung aus und die Ansicht lädt nicht die User Defined Runtime-Attribute , und gibt diesen Fehler bei der Ausgabe (nicht abstürzen) aus:
Unknown class MyClass in Interface Builder file
Failed to set (cornerRadius) user defined inspected property on (UIView)
Was bewirkt, dass die Anwendung Benutzerdefinierte Laufzeitattribute die ich unter Identity Inspector hinzugefügt habe?
Der Code ist korrekt.
Wenn Sie einen @ IBDesignable
deklarieren, werden alle @IBInspectable
-Eigenschaften als benutzerdefinierte Laufzeitattribute für den Interface Builder verfügbar gemacht.
Das Problem -
Unbekannte Klasse MyClass in der Interface Builder-Datei
Das bedeutet, dass der Interface Builder keine Klasse finden konnte. Sie haben ein falsches class festgelegt, das in Ihrer App nicht vorhanden ist.
Ihre customView-Klasse ist MyView
, aber im Interface Builder steht MyClass
Lösung zu beheben-
MyView
Auch Wenn Sie sich entschieden haben, den Kunden Designable zu entfernen, sollten Sie dies tun
Aufgrund des Fragetitels könnten einige Leute mit einem etwas anderen Problem hierher kommen (wie ich). Wenn du
Dann erhalten Sie möglicherweise einen ähnlichen Fehler
Fehler beim Festlegen (xxx) der benutzerdefinierten überprüften Eigenschaft in [Ihre benutzerdefinierte Ansicht] ...: Diese Klasse entspricht nicht der Schlüsselwertcodierung für den Schlüssel [xxx].
Die Lösung besteht darin, die alte Eigenschaft zu löschen.
Öffnen Sie den Identitätsinspektor für Ihre Klasse, wählen Sie den Eigenschaftennamen unter Benutzerdefinierte Laufzeitattribute aus und drücken Sie die Minustaste (-).
Auch dies ist nicht die Antwort auf die Frage des OP, aber es könnte die Antwort auf das Problem eines anderen sein, der hierher kommt.