变量可以传递给NSMenu动作吗?

时间:2012-03-08 07:52:20

标签: objective-c cocoa nsmenuitem nsmenu

我正在基于数组动态构建菜单,并且有一个子菜单链接到IBAction,它在Finder中打开一个文件夹。它打开的文件夹基于我的初始数组中对象的属性。

有没有办法将NSMenuItem操作链接到IBAction并传入此目录变量,因为我正在动态创建此数组?

或者我应该进入IBAction并通过引用NSMenuItem对阵列来解析目录吗?

e.g。

person = [[Person alloc] init];
// person is assigned
subMenu = [[NSMenu alloc] init];
[subMenu addItemWithTitle:@"Open folder" action:@selector(openDirectory:person.directory) keyEquivalent:@""];

2 个答案:

答案 0 :(得分:4)

这就是我追求的目标。

NSMenuItem *menuItem;
menuItem = [subMenu addItemWithTitle:@"Open folder" action:@selector(openDirectory:person.directory) keyEquivalent:@""];
[menuItem setRepresentedObject:person];

然后在我的IBAction中,我做了类似的事情来提取目录:

- (IBAction)openDirectory:sender {
    Person *person = [sender representedObject];
    NSLog(@"directory: %@",person.directory);

答案 1 :(得分:3)

操作只接受“(id) sender”参数,其中应该发送调用操作的对象。

但是如果你的动作方法存在于某个Objective C对象中(而不是单例或其他),你可以轻松地从你的动作中引用该对象的属性。

希望这对您来说很清楚,或者如果没有,请展示一些IBAction代码并告诉我们它的存在位置以及它的声明方式。