1

最初の私のコード:

   - (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:私はiPhoneではなくMacでこれを行っています。

4

2 に答える 2

6

NSMenuItemには、というメソッドがsetRepresentedObject:あり、メニュー項目オブジェクトがsenderパラメーターとしてpress:メソッドに渡されます。

したがって、コードを調整して、それぞれに対応するを呼び出すようにする必要がありますsetRepresentedObject:item次にNSMenuItempress:を呼び出し[sender representedObject]てそのアイテムを取り戻すことができます。

于 2011-01-15T17:37:27.337 に答える
4

@selector(press:)メッセージ含まれている「sender」パラメータがであると私はほぼ確信していますNSMenuItem

それで:

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

送信者NSMenuItemが選択されたものであることをログに記録する必要があります。

編集は質問を誤って解釈しました...

item特定のmenuItemが選択されたときにオブジェクトを取得したい。簡単だ。ただ行う:

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];
}
于 2011-01-15T17:32:25.930 に答える