首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有多个参数的@selector

带有多个参数的@selector
EN

Stack Overflow用户
提问于 2011-01-15 17:10:31
回答 2查看 1.4K关注 0票数 1

首先是我的代码:

代码语言:javascript
复制
   - (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:方法的参数。

非常感谢:)

附言:我这么做是为了mac,而不是iPhone。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-16 01:37:27

NSMenuItem有一个名为setRepresentedObject:的方法,菜单项对象将作为sender参数传递给press:方法。

因此,您需要调整代码以使用每个NSMenuItem附带的item调用setRepresentedObject:,然后在press:中,您可以调用[sender representedObject]来取回该项。

票数 6
EN

Stack Overflow用户

发布于 2011-01-16 01:32:26

我几乎可以肯定,包含在@selector(press:)消息中的“NSMenuItem”参数就是发送者。

所以:

代码语言:javascript
复制
- (void) press:(id)sender {
  NSLog(@"sender: %@", sender);
}

它应该记录发送者是所选的NSMenuItem

edit曲解了问题...

您希望在选择某个menuItem时检索item对象。这很简单。只需这样做:

代码语言:javascript
复制
NSMenuItem * menuItem = [m addItemWithTitle:[item title] action:@selector(press:) keyEquivalent:@""];
[menuItem setTarget:self];
[menuItem setRepresentedObject:item];

然后在你的press:方法中。

代码语言:javascript
复制
- (void) press:(id)sender {
  //sender is the NSMenuItem
  id selectedItem = [sender representedObject];
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4698792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档