首先是我的代码:
- (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。
发布于 2011-01-16 01:37:27
NSMenuItem有一个名为setRepresentedObject:的方法,菜单项对象将作为sender参数传递给press:方法。
因此,您需要调整代码以使用每个NSMenuItem附带的item调用setRepresentedObject:,然后在press:中,您可以调用[sender representedObject]来取回该项。
发布于 2011-01-16 01:32:26
我几乎可以肯定,包含在@selector(press:)消息中的“NSMenuItem”参数就是发送者。
所以:
- (void) press:(id)sender {
NSLog(@"sender: %@", sender);
}它应该记录发送者是所选的NSMenuItem。
edit曲解了问题...
您希望在选择某个menuItem时检索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];
}https://stackoverflow.com/questions/4698792
复制相似问题