2009-09-08 12 views
5

Voglio creare un NSMenu con un'opzione simile all'opzione Invia a che si troverà in Windows Explorer dove verrà elencato i dispositivi collegati a cui è possibile inviare il file.Come avere un NSMenu con azioni dinamiche

Dalla mia ricerca sembra che non sia possibile definire un selettore che invia un parametro alla funzione, quindi non è il caso di avere @selector(@"sendToVolume:1"). Quindi, in che altro modo il menu può eseguire un'attività diversa in base all'elemento su cui si fa clic quando il numero di elementi è sconosciuto?

risposta

15

NSMenuItem ha una proprietà representedObject, che può essere utilizzata per archiviare tutto ciò che si desidera, ad esempio un riferimento alla destinazione che l'elemento rappresenta.

Quando il selettore viene richiamato, è possibile quindi ottenere il representedObject posteriore:

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

Ma è possibile utilizzare i selettori con i parametri! NSObject ha tre modalità definite:

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

Ora, il primo è come avere @selector(someMethod:), ma gli ultimi due vengono utilizzati per inviare parametri al selettore. Per esempio:

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

allora si potrebbe utilizzare in questo modo:

[appController performSelector:@selector(sendToVolume:) 
       withObject:[NSNumber numberWithInt:1]]; 
Problemi correlati