Wie erstelle ich ein IBInspectable vom Typ enum
enum
ist nicht ein Interface Builder definiert, runtime-Attribut.
Die folgenden nicht zeigen im Interface Builder die Attribute Inspector:
enum StatusShape:Int {
case Rectangle = 0
case Triangle = 1
case Circle = 2
}
@IBInspectable var shape:StatusShape = .Rectangle
Aus der Dokumentation:
Sie befestigen kann IBInspectable-Attribut an eine Eigenschaft in der Deklaration einer Klasse, Klasse Erweiterung, oder der Kategorie, für jeden Typ, der unterstützt wird von der Interface Builder definiert runtime-Attribute: boolean -, integer-oder Gleitkomma-Zahl, string, lokalisierte Zeichenfolge, Rechteck, Punkt, Farbe, Größe, Reichweite und null.
Q: Wie kann ich sehen eine enum
im Interface Builder die Attribute Inspector?
InformationsquelleAutor der Frage SwiftArchitect | 2014-12-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Swift 3
@IBInspectable
var shape:StatusShape = .Rectangle
erstellt lediglich einen leeren Eintrag im Interface Builder:Einen adapter verwenden, die wirkt wie ein Brücke zwischen Swift und den Interface Builder.
shapeAdapter
ist inspectable von IB:Anders als die bedingte Kompilierung Ansatz (mit
#if TARGET_INTERFACE_BUILDER
), die Art dershape
variable nicht ändert, mit dem Ziel, potenziell eine weitere source-code-änderungen zu bewältigen, dieshape:NSInteger
vs.shape:StatusShape
Variationen:Komplette code -
► Finde diese Lösung auf GitHub.
InformationsquelleAutor der Antwort SwiftArchitect
Anstatt Ihre inspectable Enumerationen, die mit int-Werten, könnte man auch mit strings. Zwar nicht ganz so bevorzugt wie ein dropdown, zumindest diese option bietet einen gewissen Grad der Lesbarkeit.
Swift-einzige Option:
Es ist möglich, auch diese arbeiten mit objective-c sowie, durch das hinzufügen einer Initialisierung der enum. Der compiler hat aber nur die "unavailable" - Fehler für Ihre IB-nur properties in swift-code.
Swift-Option mit Obj-C Kompatibilität:
InformationsquelleAutor der Antwort Donamite
Ich kann mich nicht erinnern, das swift-syntax, aber das ist, wie ich es gelöst in obj-c
InformationsquelleAutor der Antwort Jason Bobier
Können Sie nicht. Wenn Sie wollen, dass es verfügbar im Interface Builder machen Sie Ihre Immobilie in einer der unterstützten Typen. In diesem Fall, machen ihn zu einem int und cast es zu Ihrem enum-Typ im code.
InformationsquelleAutor der Antwort i_am_jorf
Swift 3
die Lösung basiert auf SwiftArchitect
InformationsquelleAutor der Antwort Eporediese
Dies ist ein Alter thread, aber nützlich. Ich passte meine Antwort an swift Xcode 4.0 und 9.0 - Swift 4 hat seine eigenen kleinen Probleme mit diesem problem. Ich habe ein @IBInspectable variable mit enum-Typ und Xcode 9.0 ist nicht glücklich, mit mir diese "Eigenschaft kann nicht markiert werden @IBInspectable, weil sein Typ nicht sein, die in Objective-c"
@Eporediese Antworten zu diesem problem (für swift3) Teil; mit einer Eigenschaft für das storyboard, sondern eine gerade, die enum für den rest des Codes. Unten ist eine komplette code-sets, die Ihnen eine Eigenschaft funktioniert in beiden Fällen.
InformationsquelleAutor der Antwort Ohmy