2009-09-08 13 views
5

Chcę utworzyć NSMenu z opcją podobną do opcji Wyślij do, którą można znaleźć w Eksploratorze Windows, gdzie będzie wyświetlana lista podłączonych urządzeń, do których można wysłać plik.Jak uzyskać NSMenu z działaniami dynamicznymi?

Z moich badań wynika, że ​​nie można zdefiniować selektora, który wysyła parametr do tej funkcji, więc nie jest to przypadek, gdy ma się @selector(@"sendToVolume:1"). Jak inaczej mogę mieć menu wykonać inne zadanie w oparciu o który element jest klikany, gdy liczba przedmiotów jest nieznany?

Odpowiedz

15

NSMenuItem ma właściwość representedObject, której można użyć do zapisania dowolnego elementu, na przykład odwołania do miejsca docelowego, które reprezentuje element.

Kiedy przełącznik jest wywoływana, następnie można uzyskać representedObject powrotem:

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

Ale można używać selektorów z parametrami! NSObject ma trzy metody zdefiniowane tak:

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

Teraz, pierwszy jest jak @selector(someMethod:), ale dwa ostatnie są używane do wysyłania parametrów do selektora. Na przykład:

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

następnie można go używać tak:

[appController performSelector:@selector(sendToVolume:) 
       withObject:[NSNumber numberWithInt:1]]; 
Powiązane problemy