Frage

Wie docs sagen, es ist unmöglich, zwei Menüpunkte zu NSPopUpButton hinzufügen, wenn sie beide den gleichen Titel haben. Ich habe versucht, Menüpunkte [Popupbutton-Menü], aber ohne Glück hinzuzufügen. Ich habe versucht, auch ein neues Menü zu erstellen, fügen Sie Elemente zu ihm und dann mit [Popupbutton SetMenu: newMenu], aber nein. Menü immer angezeigt werden nur ein Element pro Namen.

Aber ich weiß, dass es möglich sein soll, wenn Sie versuchen, eine intelligente Wiedergabeliste in iTunes zu erstellen, könnten Sie „Playlist“ von der linken -Listenpfeil wählen, „=“ aus der Mitte, und die richtigen für Menüpunkte halten jeder Wiedergabeliste in iTunes auch wenn sie den gleichen Titel. So, wie sie es tun?

War es hilfreich?

Lösung

Ich hatte das genaue Problem und es war leicht zu lösen. Anstelle der Verwendung von NSPopUpButton Methoden wie -addItemWithTitle: die Taste, um Elemente zu manipulieren, habe ich eine NSArrayController und die Elemente in den Array-Controller hinzugefügt statt . Dann habe ich die Bindungen die Controller und die Popup-Schaltfläche zu binden, und jetzt zeigt es Elemente mit dem gleichen Titel.

die Bindungen tun:

  1. Fügen Sie ein NSArrayController in IB.
  2. Stellen Sie die NSPopUpButton Bindungen für "Inhalt" , um Array-Controller mit dem " Controller Key " zu sein "arrangedObjects"
  3. Stellen Sie die NSPopUpButton Bindungen für "Ausgewählter Index" , um Array-Controller mit dem "Regler Key" ist "selectionIndex"
  4. [Optional] Wählen Sie den Array-Controller und stellen Sie die Klassenname in Attribute, was auch immer Klasse Ihre Elemente sind zum Beispiel NSString oder Sie können die Standardeinstellung verwenden NSMutableDictionary und fügen Sie Schlüssel in das unten stehende Feld der folglich können Sie Ihre Elemente in einem Wörterbuch wickeln und verschiedene Schlüssel hinzufügen, für das, was Sie wollen in zeigen, -Listenpfeil und was Sie wollen im Hintergrund haben. gehen zu setzen, die Schlüssel des Wörterbuchs Sie in der Popup-Schaltfläche reflektiert werden sollen, um Popup-Schaltfläche Bindungen für „Inhalt“ wieder und stellen Sie den „Modal Schlüsselpfad“ der Schlüssel, den Sie in dem Array-Controller-Attribute hinzugefügt.

Andere Tipps

Während NSPopUpButton Methoden wie addItemWithTitle: und addMenu: keine doppelten Namen erlauben, ist es durchaus möglich, Gegenstände zu haben, mit dem gleichen Titel. Sie einfach den Namen selbst auf dem NSMenuItem gesetzt haben.

Zum Beispiel, wenn Sie ein Array von Strings haben (wie Playlist-Namen vielleicht) Sie wollen, dass sie zu einem Popup-Schaltfläche hinzufügen, und sicher Duplikate machen wollen wird es sein, tun Sie es wie folgt aus:

NSArray* items = [NSArray arrayWithObjects:@"Foo", @"Bar", @"Baz", @"Foo", nil];

for (NSString* item in items)
{
   [popupButton addItemWithTitle:@"blah"];
   [[popupButton lastItem] setTitle:item];
   [[popupButton lastItem] setTarget:self];
   [[popupButton lastItem] setAction:@selector(something:)];
}

Statt addItemWithTitle: zu verwenden, können Sie eine NSMenuItem manuell erstellen und es direkt zum Menü hinzufügen. Auf diese Weise können Sie einen beliebigen Titel geben Sie es an einer beliebigen Stelle im Menü eingefügt werden soll, sowie in der Lage zu.

NSMenuItem* newItem = [[NSMenuItem alloc] initWithTitle:@"foo" action:@selector(something:) keyEquivalent:@""];

[newItem setTarget:self];
[[popupButton menu] addItem:newItem];
[newItem release];
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top