Pregunta

Como docs decir que es imposible añadir dos elementos de menú para NSPopUpButton si ambos tienen el mismo título. Yo estaba tratando de añadir elementos de menú a [menú] popupButton, pero sin suerte. También estaba tratando de crear un nuevo menú, añadir elementos a ella y luego utilice [popupButton SetMenu: newMenu], pero no. Menú siempre muestra sólo un elemento por cada nombre.

Pero sé que debería ser posible, si se intenta crear una lista de reproducción inteligente en iTunes, puede seleccionar "Playlist" en el botón emergente izquierda, "=" en el medio, y el adecuado a contener elementos de menú para cada lista de reproducción en iTunes, incluso si tienen el mismo título. Entonces, ¿cómo lo hacen?

¿Fue útil?

Solución

Yo tenía el problema exacto y que se resolvió fácilmente. En lugar de utilizar NSPopUpButton métodos tales como -addItemWithTitle: para manipular los elementos de los botones, añadí un NSArrayController y añadido los elementos en el controlador de matriz en lugar . Luego utiliza los enlaces para unir el botón emergente del controlador y ahora se nota artículos con títulos en el mismo.

Para hacer los enlaces:

  1. Añadir un NSArrayController en el IB.
  2. fijar el NSPopUpButton enlaces para "contenido" para controlador de la matriz con el " Key Controller " siendo "arrangedObjects"
  3. fijar el NSPopUpButton enlaces para "índice seleccionado" para controlador de la matriz con el "Clave Controller" es "selectionIndex"
  4. [Opcional] Seleccione el controlador y fije el Nombre de la clase en los atributos a cualquier clase de sus artículos son, por ejemplo, NSString o puede utilizar el valor por defecto NSMutableDictionary y agregar claves en el cuadro de abajo que por lo tanto le permite envolver sus artículos en un diccionario y agregar diferentes claves para lo que desea mostrar en botón emergente y lo que usted quiere tener en el fondo. Para establecer qué tecla del diccionario que desea que se refleja en el botón emergente, ir a fijaciones de botón emergente de "contenido" de nuevo y establecer el "Ruta de la clave modal" a la clave que agregó en el atributo controladora de la matriz.

Otros consejos

Mientras que los métodos NSPopUpButton como addItemWithTitle: y Addmenu: no permitirán nombres duplicados, es definitivamente posible tener elementos con el mismo título. Usted simplemente tiene que establecer el nombre de la propia NSMenuItem.

Por ejemplo, si tiene una matriz de cadenas (como nombres de lista de reproducción tal vez) que desee agregar a un botón emergente, y quiere asegurarse de que los duplicados será allí, hacerlo de esta manera:

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

En lugar de utilizar addItemWithTitle:, se puede crear una NSMenuItem manualmente y añadirlo directamente al menú. Esto le permite especificar cualquier título que desee, además de ser capaz de insertar en cualquier lugar en el menú.

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

[newItem setTarget:self];
[[popupButton menu] addItem:newItem];
[newItem release];
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top