Verwenden von IBDesignable und prepareForInterfaceBuilder mit einem UILabel

8

Ich habe eine Unterklasse von UIView namens MyView , die ich erstelle.

Darin gibt es UILabel (das wird aus Gründen in Code nicht in InterfaceBuilder hinzugefügt).

Ich habe dann eine Eigenschaft auf MyView namens color .

Ich möchte, dass Interface Builder die color auswählen kann und auch die Beschriftung mit der Schriftart anzeigen kann, die auf diese Farbe eingestellt ist.

In meinem Code habe ich ...

%Vor%

IBInspectable

In IB kann ich die Farbeigenschaft dort sehen und ich kann es einstellen. Ärgerlich nimmt es einen Standardwert von .clearColor (), aber nicht die Farbe, die ich im Code einstelle. Gibt es eine Möglichkeit, das zu beheben?

IBDesignable

Wenn ich die Ansicht in InterfaceBuilder einfüge, werden alle inspizierbaren Eigenschaften angezeigt, aber in der aktuellen Ansicht wird nichts angezeigt.

Wenn ich es laufe, funktioniert alles gut. Ich möchte nur etwas in IB arbeiten lassen (außer drawRect). Ich finde jedoch einen deutlichen Mangel an Dokumentation.

Bearbeiten - Warnungen

Ich habe gerade bemerkt, dass ich Build-Fehler / Warnungen bekomme, die sagen ...

  

Warnung: IB Designables: Ignorieren des benutzerdefinierten Laufzeitattributs für den Schlüsselpfad "color" in der Instanz von "UIView". Beim Versuch, den Wert zu setzen, wurde eine Ausnahme ausgelöst: [setValue: forUndefinedKey:]: Diese Klasse ist für die Schlüsselfarbe nicht schlüsselcodierfähig.

Dies wird wahrscheinlich die Lösung ändern:)

    
Fogmeister 22.01.2015, 12:04
quelle

3 Antworten

2

Ich habe den Code aus Ihrer Frage in eine neue App kopiert, die Ansicht hinzugefügt und die Eigenschaft festgelegt, und es funktionierte einwandfrei.

Der angezeigte Fehler deutet darauf hin, dass Sie die Ansicht irgendwann im Identity Inspector wieder in eine einfache UIView geändert haben (die benutzerdefinierten Attribute bleiben in diesem Fall erhalten).

    
jrturton 22.01.2015, 12:41
quelle
1

Wenn color festgelegt ist, müssen Sie die Eigenschaft textLabel wie folgt mit einem didSet

aktualisieren %Vor%     
topher91 22.01.2015 12:16
quelle
1

Ich verwende swift 2.0 und in meinem Fall fehlte die Eigenschaft dynamic . Endgültiger Code:

%Vor%

Fehler beim Erstellen von IB Designables : Ссылка

    
Ramis 13.11.2015 07:41
quelle