如何使NSMenu具有动态操作

时间:2009-09-08 09:11:52

标签: cocoa nsmenu

我想创建一个NSMenu,其选项类似于您在Windows资源管理器中找到的“发送到”选项,它将列出您可以将文件发送到的附加设备。

从我的研究中看来,似乎不可能定义一个向函数发送参数的选择器,因此不是@selector(@"sendToVolume:1")的情况。那么,如果项目数量未知,我还可以根据点击哪个项目来执行不同的任务?

2 个答案:

答案 0 :(得分:15)

NSMenuItem具有representedObject属性,可用于存储您喜欢的任何内容,例如对项目所代表的目标的引用。

调用选择器后,您可以返回RepresentObject:

-(IBAction)sendTo:(id)sender {
    id destination = [sender representedObject];
}

答案 1 :(得分:1)

但你可以使用带参数的选择器! NSObject有三种方法定义如下:

-performSelector:
-performSelector:withObject:
-performSelector:withObject:withObject:

现在,第一个就像拥有@selector(someMethod:),但最后两个用于将参数发送到选择器。例如:

-(void)sendToVolume:(NSNumber)nr { 
//do stuff
}

然后你可以像这样使用它:

[appController performSelector:@selector(sendToVolume:) 
               withObject:[NSNumber numberWithInt:1]];