我正在基于数组动态构建菜单,并且有一个子菜单链接到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:@""];
答案 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
代码并告诉我们它的存在位置以及它的声明方式。