2011-01-15 17 views
1

zuerst meinen Code:@selector mit mehreren Argumenten

- (NSMenu*)sourceList:(PXSourceList*)aSourceList menuForEvent:(NSEvent*)theEvent item:(id)item 
    { 
    if ([theEvent type] == NSRightMouseDown || ([theEvent type] == NSLeftMouseDown && ([theEvent modifierFlags] & NSControlKeyMask) == NSControlKeyMask)) { 
     NSMenu * m = [[NSMenu alloc] init]; 
     if (item != nil) { 
     NSLog(@"%@",[item title]); 

     [m addItemWithTitle:[item title] action:@selector(press:) keyEquivalent:@""]; // problem. i want to give "item" as an argument..... 

     for (NSMenuItem* i in [m itemArray]) { 
     [i setTarget:self]; 
     } 
     } else { 
     [m addItemWithTitle:@"clicked outside" action:nil keyEquivalent:@""]; 
     } 
     return [m autorelease]; 
    } 
    return nil; 
    } 
-(void) press:(id)sender{ 
NSLog(@"PRESS"); 
} 

möchte ich mit einem Wähler item als Argument für meine press: Methode geben.

Vielen Dank :)

PS: Ich bin nicht iPhone für den Mac zu tun.

Antwort

6

NSMenuItem hat eine Methode setRepresentedObject:, und der Menüpunkt Objekt aufgerufen wird als sender Parameter press: Methode übergeben werden.

So müssen Sie Ihren Code anpassen setRepresentedObject: mit dem item nennen, die mit jedem NSMenuItem geht, und dann in press: können Sie [sender representedObject] Rückruf das Element zu erhalten.

+0

+1 whoops, ich habe übersehen, dass 'item' anders ist als' NSMenuItem'. –

+0

vielen Dank, es hat +1 funktioniert – cocos2dbeginner

4

Ich bin fast sicher, dass die „Sender“ Parameter, die mit der @selector(press:) Nachricht enthalten ist sind die NSMenuItem.

So:

- (void) press:(id)sender { 
    NSLog(@"sender: %@", sender); 
} 

dass log sollte, dass der Absender die NSMenuItem ist, die ausgewählt wurde.

bearbeiten die Frage falsch verstanden ...

Sie wollen die item Objekt abzurufen, wenn eine bestimmte menuItem ausgewählt ist. Das ist einfach. Just do:

NSMenuItem * menuItem = [m addItemWithTitle:[item title] action:@selector(press:) keyEquivalent:@""]; 
[menuItem setTarget:self]; 
[menuItem setRepresentedObject:item]; 

Dann in Ihrer press: Methode ...

- (void) press:(id)sender { 
    //sender is the NSMenuItem 
    id selectedItem = [sender representedObject]; 
} 
+0

Element ist nicht NSMenuItem. item ist eine benutzerdefinierte Klasse von mir. Es Unterklasse nicht nsenuitem – cocos2dbeginner

+0

@ cocos2dbeginner ja, erkannte ich, dass, wenn ich @grahamamps Antwort lese. Ich habe meine für mehr Klarheit bearbeitet –

+0

Danke, ich werde das später versuchen! und dann akzeptiere deine Antwort :) – cocos2dbeginner

Verwandte Themen