Cocoa Bindungen: Mähdreschers Artikel mit Arraycontroller gebunden Elemente in einem NSPopupButton fixiert
-
12-09-2019 - |
Frage
Ich versuche, eine Farbauswahl unter Verwendung einen NSPopupButton zu machen, und am Ende habe ich einen Separator mag und eine „Custom ...“ auswählen. Ist es möglich, die Farben von Array zu laden, dann das Trenn heften und „custom“ Artikel auf der Unterseite? wenn ja, wie?
Danke!
Lösung
Sie sollten wirklich ein verwenden NSColorWell statt der eigenen Hand-Handwerk. Einer der Gründe, warum Apple überlegen GUIs als andere Plattformen hat (vor allem Linux) ist, weil die Entwickler die Standardkomponenten für das Tun dieser Art der Sache nutzen. Argumente wie ‚weil ich denke, es ist die Oberfläche prägnanter macht‘ sind die Gründe, warum GIMP so ein gutes Beispiel dafür, wie nicht eine GUI zu entwerfen.
Wie gesagt, im Grunde, was Sie versuchen, ein dynamisches Menü zu tun ist, zu definieren, anstatt eine feste Größe Liste (wie man in Interface tun könnte). Sie können dies über die NSMenu und NSMenuItem Klassen.
MenuList Dokumentation Führung
Was würden Sie brauchen, zu tun ist, anstatt das Menü an On-Demand ist es zu füllen, wenn die Anwendung mit dem Standard-Array startet. Dann, wenn die Array-Änderungen (über Ihre Modellobjekte) lösen die Neuschöpfung des Menüs. Alternativ Falle das Menü mit der menuNeedsUpdate. Meldung
Andere Tipps
Ich habe ein ähnliches Popupbutton erstellt, aber ich bin noch nicht verbindlich die Standardfarben zu einer festen Anordnung (obwohl ich auf, dass jetzt arbeite). gibt es zwei appraoches hier - sowohl als Hacks von Puristen werden können, aber sie tun den Job zu erledigen
.-
die NSPopUpButtonCell Unterklasse und überschreiben attachPopUpWithFrame Ihre eigene Menüpunkte hinzuzufügen. Ich habe dies neben gebunden Artikel nicht versucht.
-
Hard-Code des 'Custom ..' Objekt im Array, und die Wirkung der angezeigten Farbtafel hat, ein neues Element zum Array hinzuzufügen.
Dies ist möglich, mit Bindungen ab Mac OS X 10.5 den "Content-Placement"-Tag; siehe meine Antwort hier:
Nicht Bindungen verwenden, nicht. Sie könnten die „Custom ...“ einer der leicht genug, aber nicht das Trennzeichen.
Warum ein NSColorWell nicht verwendet eigentlich?
- Konfigurieren Sie Ihre Bindungen auf dem
NSPopupButton
wie gewohnt - In Ihrer Bindungen Konfiguration für die
NSPopupButton
, stellen Sie denContent Placement Tag
Wert1
- Im Storyboard, das NSPopupButton erweitern und die NSMenu mit dem
NSPopupButton
assoziiert wählen -
Vergewissern Sie sich, zwei Artikel im Menü:
Optional: ein Separator Menüpunkt zwischen dynamischen und statischen Inhalt hinzufügen:
- Stellen Sie Ihren
ViewController
als Delegierter für die NSMenu -
Machen Sie Ihre Ihre
ViewController
einNSMenuDelegate
und fügen Sie den folgenden Code in IhrViewController
:extension YourViewController: NSMenuDelegate { func menuNeedsUpdate(_ menu: NSMenu) { menu.insertItem(NSMenuItem.separator(), at: menu.numberOfItems-1) } }
, die einfach richtig einen Separator zwischen dynamischem Inhalt und Ihrem statischen „Custom ...“ Menüpunkt
werden einfügen