Ich habe es geschafft, dass die IBDesignable/IBInspectable
Attribute mit direkten Unterklassen von NSView
arbeiten, aber nicht mit einer direkten Unterklasse von NSButton
. Dies veranlasst mich zu der Frage, ob die Cocoa-Implementierung tatsächlich auf NSView
beschränkt ist.
Fast jedes Beispiel im Web (und Apple WWDC 2014 Xcode-Video) verwendet NSView
und zieht dann eine benutzerdefinierte Ansichtskomponente aus der Bibliothek in die Zeichenfläche (und ändert dann ihre Klasse).
Ist es möglich, IBDesignable
mit Unterklassen von NSControl
und NSButton
etc ... zu verwenden? Ich habe viele Beispiele im Web mit UIButton
gesehen.
Wenn es möglich ist, was sollten Sie aus der Bibliothek auf die Leinwand ziehen? Es macht keinen Sinn, dass es eine "benutzerdefinierte Ansicht" ist. Auf der anderen Seite gibt es kein "benutzerdefiniertes Steuerelement" verfügbar.
Um klar zu sein, kann ich das IBInspectable-Attribut zur Entwurfszeit anzeigen lassen; aber alle Änderungen scheinen zur Entwurfszeit nicht zu rendern.
Die Problemumgehung besteht darin, ein beliebiges benutzerdefiniertes NSButton
, das ich erstellen möchte, in ein NSView
(über die Komposition) einzubinden, aber das scheint ein bisschen wie ein Hack zu sein ...
Ich habe angefangen, mit einem benutzerdefinierten NSButton
und NSButtonCell
herumzuspielen.
Wenn Sie eine Schaltfläche aus der Bibliothek auf die Zeichenfläche ziehen und ihre Klasse und die Zellklasse ändern, wird das Rendern nicht fortgesetzt. Ich denke, das liegt daran, dass Interface Builder immer noch eine Menge benutzerdefinierter Einstellungen zum Einrichten von NSButtonCell
vornimmt.
Was für mich in Ordnung ist, ist das Ziehen einer benutzerdefinierten Ansicht aus der Bibliothek auf die Zeichenfläche und das Festlegen der Klasse. Damit dies funktioniert, müssen Sie die Zelle in NSButtons -initWithCoder:
einrichten.
Außerdem habe ich ein Sample von Apple mit einem Layer-Backed-Custom gefunden Kontrollkästchen
Tags und Links xcode cocoa swift interface-builder ibdesignable