如何管理新的NSMenuItem?

时间:2014-10-08 03:35:54

标签: objective-c xcode macos cocoa

我正在按代码添加menuItems。

我正在使用“选择器”,但我的问题是因为我有一个“可变”菜单,我不知道它会有多少行,所以我需要管理每一行,但不知道有多少行。

也许使用代码我可以更好地解释问题。

我有一个循环如下(或多或少)

for (punterolineas=punterolineas; punterolineas <= intNumlineas; punterolineas++)

{
    NSDictionary *dic = [lineas objectAtIndex:punterolineas];
    NSMenuItem *item = [[NSMenuItem alloc] initWithTitle:[dic objectForKey:@"txtMostrado"]action:@selector(menuitem:) keyEquivalent:@""];//Where menuitem is  to manage the item, but I need to identify which one it is.
    [item setTarget:self];
    [statusMenu addItem:item];
}

我认为答案可能是“menuitem”IBaction的“发件人”,但我该如何管理呢?

提前致谢

1 个答案:

答案 0 :(得分:0)

有几种方法:

  • 设置每个菜单项的tag。在操作方法(-menuitem:)中,检查sender标记并确定要执行的操作。在您的情况下,您可以使用punterolineas,假设lineas数组在菜单项的生命周期内保持不变。

  • 设置每个菜单项的representedObject。在操作方法中,获取representedObject的{​​{1}}并使用它来控制您的操作。在您的情况下,如果sender具有控制菜单应该执行的操作的信息,则可以使用dic作为representedObject

  • 使用正确的模型对象 - 自定义类的实例 - 而不是NSDictionary来表示线条。让菜单项定位模型对象而不是self。使用该模型类的方法而不是包含上述代码的类的方法作为操作方法。同样,这要求线对象至少与菜单项一样长。