Domanda

Per quanto documenti dicono che è impossibile aggiungere due voci di menu per NSPopUpButton se entrambi hanno lo stesso titolo. Stavo cercando di aggiungere voci di menu a [menu] popupButton, ma senza fortuna. Sono stato anche cercando di creare un nuovo menu, aggiungere elementi ad esso e quindi usare [popupButton setMenu: newMenu], ma no. Menu Display sempre solo un elemento per nome.

Ma so che dovrebbe essere possibile, se si tenta di creare una smart playlist in iTunes, è possibile selezionare "Playlist" dal pulsante popup a sinistra, "=" dal mezzo, e quello di destra terrò voci di menu per ogni playlist in iTunes anche se hanno lo stesso titolo. Così come lo fanno?

È stato utile?

Soluzione

ho avuto il problema esatto ed è stato risolto facilmente. Invece di utilizzare NSPopUpButton metodi come -addItemWithTitle: per manipolare gli elementi di pulsante, ho aggiunto un NSArrayController e aggiunto gli elementi nel controllore matrice invece . Poi ho usato le associazioni di legare il controller e il pulsante popup e ora si vede oggetti con gli stessi titoli.

Per fare le associazioni:

  1. Aggiungi un NSArrayController in IB.
  2. Imposta il NSPopUpButton associazioni per "Contenuto" per controller di array con i " regolatore chiave " essere "arrangedObjects"
  3. Imposta il NSPopUpButton associazioni per "Indice selezionato" a controller di array con il è "selectionIndex" "Chiave Controller"
  4. [Facoltativo] Selezionare il controller di array e impostare il Nome classe in attributi per qualsiasi classe i vostri articoli sono per esempio NSString oppure è possibile utilizzare il valore di default NSMutableDictionary e aggiungere chiavi nella casella qui sotto, che permette di conseguenza di avvolgere gli oggetti in un dizionario e aggiungere chiavi diverse per ciò che si desidera visualizzare in tasto popup e ciò che si desidera avere in background. Per impostare quale tasto del dizionario che si desidera essere riflessa nel pulsante a comparsa, andare al binding del pulsante a comparsa per "Contenuto" e impostare il "Modal Percorso tasto" per la chiave si aggiunge l'attributo controller di array.

Altri suggerimenti

Mentre i metodi NSPopUpButton come addItemWithTitle: e addMenu: non permetteranno nomi duplicati, è sicuramente possibile avere elementi con lo stesso titolo. È sufficiente impostare il nome sulla NSMenuItem stesso.

Ad esempio, se si dispone di un array di stringhe (come i nomi delle playlist forse) che si desidera aggiungere a un pulsante popup, e vogliono assicurarsi che i duplicati saranno in là, fate in questo modo:

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:)];
}

Invece di usare addItemWithTitle:, è possibile creare un NSMenuItem manualmente e aggiungerlo direttamente al menu. Ciò consente di specificare qualsiasi titolo che si desidera, oltre ad essere in grado di inserire in qualsiasi posizione nel menu.

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

[newItem setTarget:self];
[[popupButton menu] addItem:newItem];
[newItem release];
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top