Für diejenigen, die nicht wissen, worüber ich spreche, hat Xcode 6.0 neue Funktionen hinzugefügt, IBDesignable und IBInspectable.Können Sie IBidable-Eigenschaften mit Kategorien/Erweiterungen zu UIView hinzufügen?
Wenn Sie Ihre benutzerdefinierten Ansichten mit IBInspectable-Eigenschaften kennzeichnen, werden diese Eigenschaften im IB-Informationsfenster "Attribute" angezeigt.
Wenn Sie eine benutzerdefinierte UIView-Unterklasse mit IBDesignable kennzeichnen, kompiliert Xcode Ihre Ansichten und ruft den Code auf, um Ihre Ansichtsobjekte im Xcode-Fenster zu rendern, damit Sie sehen können, wie sie aussehen.
Die Technik zum Hinzufügen von IBDesignable und IBInspectable-Attributen zu benutzerdefinierten Ansichten ist in Swift und Objective-C ziemlich identisch. IBInspectable-Eigenschaften werden unabhängig von der Sprache, in der Sie sie definieren, im Attribute Inspector von Interface Builder angezeigt.
Ich habe eine Kategorie von UIView in Objective-C und eine Erweiterung von UIView in Swift erstellt, die die borderWidth-, cornerRadius-, borderColor- und layerBackgroundColor-Eigenschaften des zugrunde liegenden Layers der Ansicht als Eigenschaften der Ansicht heraufstufen. Wenn Sie die Eigenschaft ändern, gibt die Erweiterung/Kategorie die Konvertierung nach Bedarf ein und leitet die Änderung an den Layer weiter.
Der IBInspectable Teil funktioniert gut. Ich sehe und kann die neuen Eigenschaften im IB-Attribute-Inspektor einstellen.
Ich hätte letzte Woche schwören können, dass das IBDesignable-Attribut für meine Ansichtskategorie/-erweiterung ebenfalls funktionierte und ich mein benutzerdefiniertes UIView-Kategorierendering in IB mit seinen geänderten Ebenenattributen sehen konnte. Diese Woche funktioniert es nicht.
War ich halluzinieren?
Können Kategorien/Erweiterungen bestehender Systemklassen ihre benutzerdefinierte Benutzeroberfläche im Interface Builder erstellen, wenn sie mit IBDesignable eingerichtet sind?
Ja, Sie können ... ich glaube. Welcher Teil funktioniert nicht? Sie können die Eigenschaften im Eigenschafteninspektor nicht festlegen? Oder Sie können sie im Inspektor festlegen, aber die Ansicht wird nicht aktualisiert, um die Änderungen zu berücksichtigen? – nhgrif
Hmm, ich nehme das zurück. Es sieht so aus, als ob ich die Eigenschaften im Eigenschafteninspektor anzeigen kann, sie werden jedoch beim Interface Builder nicht aktualisiert. Wenn ich jedoch kompiliere und laufe, werden die Eigenschaften * angewendet. – nhgrif
@nhgrif, ich hätte klarer sein sollen. Das ist richtig. Die Eigenschaften erscheinen im Inspektor, ich kann ihre Werte einstellen, und sie arbeiten dann im laufenden Programm. Die Ansicht spiegelt jedoch nicht die Änderungen im IB-Fenster wider. –