@selector с несколькими аргументами - PullRequest
1 голос
/ 15 января 2011

первый мой код:

   - (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");
}

Я хочу указать item в качестве аргумента моего press: метода с селектором.

Большое спасибо:)

PS: я делаю это для Mac, а не для iPhone.

Ответы [ 2 ]

6 голосов
/ 15 января 2011

NSMenuItem имеет метод с именем setRepresentedObject:, и объект пункта меню будет передан в качестве параметра sender методу press:.

Так что вам нужно настроить код для вызова setRepresentedObject:с item, который идет с каждым NSMenuItem, а затем в press: вы можете позвонить [sender representedObject], чтобы получить этот предмет обратно.

4 голосов
/ 15 января 2011

Я почти уверен, что параметр "отправитель", включенный в сообщение @selector(press:) , равен NSMenuItem.

Итак:

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

Это должно регистрировать, что отправителем является NSMenuItem, который был выбран.

edit неправильно истолковал вопрос ...

Вы хотите получить itemобъект, когда выбран определенный пункт меню.Это легко.Просто сделайте:

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

Тогда в вашем press: методе ...

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