5

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

有没有办法将 NSMenuItem 动作链接到 IBAction 并在我动态创建这个数组时传入这个目录变量?

或者我应该进入 IBAction 并通过引用 NSMenuItem 和反对数组来解析目录?

例如

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

2 回答 2

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);
于 2012-03-08T08:07:41.830 回答
3

一个动作只需要一个“ (id) sender”参数,调用该动作的对象应该被发送到该参数。

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

希望这对您来说很清楚,或者如果没有,请显示一些您的IBAction代码并告诉我们它在哪里以及它是如何声明的。

于 2012-03-08T08:05:50.730 回答