Pregunta

Soy nuevo en la programación Obj-C / Cocoa, y estoy teniendo un problema tratando de agregar dinámicamente elementos de menú para una instancia NSMenu y tienen el selector de acción de los elementos ya establecido después de la inserción.

Puedo, añadir los elementos de menú dinámico muy bien, pero el selector de acción no se activa cuando se hace clic en el elemento a través del menú.

La primera línea de abajo es la línea de código que estoy utilizando para añadir el elemento de menú. Puede establecer Soy la creación de la acción:. (SEL) aSelector a la función "openEchowavesURL"

Esta función se encuentra en el mismo archivo de clase del controlador y he incluido la definición de función a continuación.

¿Solo estoy llamando a la sintaxis del selector mal o calle detrás? O lo que es el truco para obtener el elemento de menú para llamar a un selector cuando se hace clic?


[statusMenu insertItemWithTitle:[NSString stringWithFormat:@"%d - %@", convo.newMessagesCount, convo.ewName] action:@selector(openEchowavesURL:) keyEquivalent:@"" atIndex:0];

- (void)openEchowavesURL:(id)sender {
    // function details here
}
¿Fue útil?

Solución

Si desea que la acción que se activará en contra de su objeto, tiene que especificar un objetivo para el nuevo NSMenuItem :

NSMenuItem *item = [statusMenu insertItemWithTitle:[NSString stringWithFormat:@"%d - %@", convo.newMessagesCount, convo.ewName] action:@selector(openEchowavesURL:) keyEquivalent:@"" atIndex:0];
[item setTarget:self]; // or whatever target you want

Si no lo hace, entonces el cadena NSResponder se pueda pisar hasta que un objeto se responde a la selector.

Otros consejos

Las acciones tienen un objetivo o de lo contrario se envían a cero y luego se aplican nuevas normas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top