Ich möchte ein @IBInspectable
Element erstellen , wie Sie auf dem Bild unten sehen:
Meine Idee ist es, so etwas wie enum als Typ zu verwenden @IBInspectable
, aber es sieht so aus, als ob es nicht der Fall ist. Gibt es Ideen, wie man ein solches Element implementiert?
BEARBEITEN:
Es sieht so aus, als ob @IBInspectable
nur diese Typen unterstützt werden:
Int
CGFloat
Double
String
Bool
CGPoint
CGSize
CGRect
UIColor
UIImage
Mist
Antworten:
Das ist (vorerst) nicht möglich. Sie können nur die Typen verwenden, die im Abschnitt Benutzerdefinierte Laufzeitattribute angezeigt werden .
Aus Apples Dokument :
quelle
Eine andere Problemumgehung besteht darin, zu ändern, wie eine Aufzählungseigenschaft dem Interface Builder angezeigt wird. Beispielsweise:
Dies setzt eine Aufzählung mit dem Namen FontWeight voraus. Es beruht auf der Tatsache, dass Aufzählungen und ihre rohen ganzzahligen Werte in Objective-C etwas austauschbar verwendet werden können. Anschließend können Sie im Interface Builder eine Ganzzahl für die Eigenschaft angeben, die nicht ideal ist, aber funktioniert und bei programmgesteuerter Verwendung derselben Eigenschaft ein geringes Maß an Typensicherheit beibehält.
Dies ist eine bessere Alternative als das Deklarieren einer separaten Integer-Eigenschaft, da Sie keine zusätzliche Logik schreiben müssen, um eine zweite Integer-Eigenschaft zu verarbeiten, mit der auch dasselbe erreicht werden kann.
Dies funktioniert jedoch nicht mit Swift, da wir nicht implizit von einer Ganzzahl in eine Aufzählung umwandeln können. Irgendwelche Gedanken zur Lösung wären willkommen.
quelle
Ich mache dies mit einem Inspectable NSInteger-Wert und überschreibe den Setter, damit er die Aufzählung setzen kann. Dies hat die Einschränkung, dass keine Popup-Liste verwendet wird. Wenn Sie Ihre Aufzählungswerte ändern, werden die Schnittstellenoptionen nicht entsprechend aktualisiert.
Beispiel.
In der Header-Datei:
In der Implementierungsdatei:
Sie können dort optional eine Logik hinzufügen, um sicherzustellen, dass sie auf einen gültigen Wert gesetzt wird
quelle
Sikhapol ist korrekt, Aufzählungen werden auch in xCode 9 noch nicht unterstützt. Ich glaube, der sicherste Ansatz besteht darin, Aufzählungen als Zeichenfolgen zu verwenden und eine "private" IBInspectable-Variable "shadow" zu implementieren. Hier ist ein Beispiel für ein BarBtnPaintCode-Element, das ein Barbutton-Element darstellt, das mit einem benutzerdefinierten Symbol (das mit PaintCode erstellt wird) direkt im Interface Builder (Swift 4) gestaltet werden kann.
Beim Erstellen von Schnittstellen geben Sie einfach die Zeichenfolge ein (identisch mit dem Aufzählungswert), wodurch diese klar bleibt (wenn Sie Zahlen eingeben, weiß niemand, was sie bedeuten).
quelle
Wie @sikhapol antwortete, ist dies nicht möglich. Die Problemumgehung, die ich dafür verwende, besteht darin, eine Reihe von
IBInspectable
Bools in meiner Klasse zu haben und nur einen im Interface Builder auszuwählen. Fügen Sie für zusätzliche Sicherheit, dass nicht mehrere festgelegt sind,NSAssert
für jeden einen im Setter hinzu.Dies ist ein wenig langweilig und ein bisschen schlampig IMO, aber es ist der einzige Weg, um diese Art von Verhalten zu erreichen, die ich mir vorstellen kann
quelle
Ich möchte hinzufügen, dass die Bezeichner von
enum
zur Laufzeit für niemanden in Objective-C verfügbar sind. Es kann also keine Möglichkeit geben, es irgendwo anzuzeigen.quelle
Meine Lösung war zu tun:
Auf dem IB selbst müssen Sie im Feld keyboardType ein int festlegen
quelle