Ich war in der Lage, es herumzuarbeiten, aber die Lösung ist ein bisschen knifflig. Es ist zu debattieren, wenn der Gewinn eine Anstrengung wert ist, aber hier ist, wie ich es rein in Interface Builder implementiert habe
Zuerst habe ich eine benutzerdefinierte UIView
Unterklasse namens P2View
So sieht es im Interface Builder aus
So habe ich diese benutzerdefinierte Ansicht in den Beispielansicht-Controller eingebettet, der in einem Storyboard definiert ist. Eigenschaften von P2View
werden im Attribut-Inspektor festgelegt.
Es gibt 3 erwähnenswerte Punkte
Erstens:
Benutze Bundle(for: type(of: self))
beim Laden der Feder. Dies liegt daran, dass der Interface Builder die Designables in dem separaten Prozess rendert, wobei das Hauptpaket nicht mit dem Hauptpaket identisch ist.
Zweitens:
%Vor% Wenn Sie IBInspectables
mit IBOutlets
kombinieren, müssen Sie daran denken, dass die Funktionen didSet
vor awakeFromNib
method aufgerufen werden. Aus diesem Grund werden die Steckdosen nicht initialisiert und Ihre App wird wahrscheinlich an dieser Stelle abstürzen. Leider können Sie die Funktion didSet
nicht weglassen, da der Interface Builder Ihre benutzerdefinierte Ansicht nicht rendert, so dass wir diese Datei hier als schmutzig betrachten müssen.
Drittens:
%Vor% Wir müssen unsere Kontrollen irgendwie initialisieren. Wir konnten dies nicht tun, wenn didSet
function aufgerufen wurde, also müssen wir den in den IBInspectable
Eigenschaften gespeicherten Wert verwenden und sie am Ende der awakeFromNib
Methode initialisieren.
So können Sie eine benutzerdefinierte Ansicht auf einem Xib implementieren, sie in ein Storyboard einbetten, sie auf einem Storyboard konfigurieren, sie rendern lassen und eine App ohne Absturz verwenden. Es erfordert einen Hack, aber es ist möglich.