【问题标题】:Can a variable be passed into an NSMenu action?可以将变量传递给 NSMenu 操作吗?
【发布时间】:2012-03-08 07:52:20
【问题描述】:

我正在基于数组动态构建菜单,并且有一个子菜单链接到 IBAction,该 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:@""];

【问题讨论】:

    标签: objective-c cocoa nsmenuitem nsmenu


    【解决方案1】:

    这就是我所追求的。

    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);
    

    【讨论】:

    • 啊,所以您确实使用了我的解决方案(访问对象的属性)。好!
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-04-16
      • 2021-02-07
      • 1970-01-01
      • 1970-01-01
      • 2010-10-05
      • 2020-08-26
      • 2022-06-16
      • 2020-02-02
      • 1970-01-01
      相关资源
      最近更新 更多