Cocoa Bindungen: Mähdreschers Artikel mit Arraycontroller gebunden Elemente in einem NSPopupButton fixiert

StackOverflow https://stackoverflow.com/questions/1248044

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!

War es hilfreich?

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

.
  1. die NSPopUpButtonCell Unterklasse und überschreiben attachPopUpWithFrame Ihre eigene Menüpunkte hinzuzufügen. Ich habe dies neben gebunden Artikel nicht versucht.

  2. 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:

Separator Artikel in NSPopupButton mit Bindungen

Nicht Bindungen verwenden, nicht. Sie könnten die „Custom ...“ einer der leicht genug, aber nicht das Trennzeichen.

Warum ein NSColorWell nicht verwendet eigentlich?

  1. Konfigurieren Sie Ihre Bindungen auf dem NSPopupButton wie gewohnt
  2. In Ihrer Bindungen Konfiguration für die NSPopupButton, stellen Sie den Content Placement Tag Wert 1

  1. Im Storyboard, das NSPopupButton erweitern und die NSMenu mit dem NSPopupButton assoziiert wählen
  2. Vergewissern Sie sich, zwei Artikel im Menü:

    • Erstes Element, das den dynamischen Inhalt wird „repräsentieren“. Stellen Sie den Tag-Wert auf 1 -> dies ist wichtig für die Bindung von dynamischen Inhalte an der richtigen Stelle eingesetzt werden. loading="lazy"
    • Zweiter Eintrag wird Ihre "Custom ..." Menüpunkt

Optional: ein Separator Menüpunkt zwischen dynamischen und statischen Inhalt hinzufügen:

  1. Stellen Sie Ihren ViewController als Delegierter für die NSMenu
  2. Machen Sie Ihre Ihre ViewController ein NSMenuDelegate und fügen Sie den folgenden Code in Ihr ViewController:

    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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top