Können Sie UIView IBDesignable-Eigenschaften mithilfe von Kategorien / Erweiterungen hinzufügen?

Für diejenigen, die nicht wissen, wovon ich spreche, hat Xcode 6.0 die neuen Funktionen IBDesignable und IBInspectable hinzugefügt.

Wenn Sie Ihre benutzerdefinierten Ansichten mit IBInspectable-Eigenschaften versehen, werden diese Eigenschaften im Attributinspektor in IB angezeigt.

Wenn Sie eine benutzerdefinierte UIView-Unterklasse mit IBDesignable markieren, kompiliert Xcode Ihre Ansichten und ruft den Code auf, um Ihre Ansichtsobjekte direkt im Xcode-Fenster zu rendern, sodass 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 im Eigenschafteninspektor von Interface Builder angezeigt, unabhängig davon, in welcher Sprache Sie sie definieren.

Ich habe in Objective-C eine UIView-Kategorie und in Swift eine Erweiterung von UIView erstellt, die die Eigenschaften borderWidth, cornerRadius, borderColor und layerBackgroundColor der zugrunde liegenden Ebene der Ansicht als Eigenschaften der Ansicht heraufstufen. Wenn Sie die Eigenschaft ändern, führt die Erweiterung / Kategorie die erforderliche Typkonvertierung durch und leitet die Änderung an den Layer weiter.

The IBInspectable Teil funktioniert großartig. Ich kann die neuen Eigenschaften im IB-Attributinspektor anzeigen und festlegen.

Ich hätte schwören können, dass letzte Woche das IBDesignable-Attribut für meine Ansichtskategorie / -erweiterung ebenfalls funktioniert hat und ich konnte sehen, dass meine benutzerdefinierte UIView-Kategorie mit den geänderten Ebenenattributen in IB gerendert wurde. Diese Woche funktioniert es nicht.

Wurde ich halluzinieren?

Können Kategorien / Erweiterungen vorhandener Systemklassen ihre benutzerdefinierte Benutzeroberfläche in Interface Builder zeichnen, wenn sie mit IBDesignable eingerichtet werden?

Antworten auf die Frage(10)

Ihre Antwort auf die Frage