2009-09-08 6 views
5

Quiero crear un NSMenu con una opción similar a la opción Enviar a que encontrarías en el Explorador de Windows, donde se enumerarán los dispositivos conectados a los que puedes enviar el archivo.Cómo tener un NSMenu con acciones dinámicas

De mi investigación parece que no es posible definir un selector que envíe un parámetro a la función, así que no es un caso de tener @selector(@"sendToVolume:1"). Entonces, ¿de qué otro modo podría hacer que el menú realice una tarea diferente según el elemento al que se hace clic cuando se desconoce la cantidad de elementos?

Respuesta

15

NSMenuItem tiene una propiedad representedObject, que se puede usar para almacenar cualquier cosa que desee, como una referencia al destino que representa el elemento.

Cuando se invoca el selector, a continuación, puede obtener la representedObject vuelta:

-(IBAction)sendTo:(id)sender { 
    id destination = [sender representedObject]; 
} 
1

Pero puede utilizar selectores con los parámetros! NSObject tiene tres métodos definidos como esto:

-performSelector: 
-performSelector:withObject: 
-performSelector:withObject:withObject: 

Ahora, la primera es como tener @selector(someMethod:), pero los dos últimos se utilizan para enviar parámetros al selector. Por ejemplo:

-(void)sendToVolume:(NSNumber)nr { 
//do stuff 
} 

entonces se podría utilizar de esta manera:

[appController performSelector:@selector(sendToVolume:) 
       withObject:[NSNumber numberWithInt:1]]; 
Cuestiones relacionadas