2014-10-08 26 views
-1

我正在通过代码添加menuItems。如何管理新的NSMenuItem?

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

也许随着代码我可以更好地解释这个问题。

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

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]; 
} 

我认为,答案可能是在“菜单项” IBAction为的“发件人”,但要如何管理呢?

在此先感谢

+0

你是什么意思“管理IBaction”?你可以使用'-setAction:'方法设置菜单项的'action'属性。 – 2014-10-08 03:52:58

+0

是的,对不起,它需要更多的信息。 – xur 2014-10-08 03:57:38

回答

0

有几种方法:

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

  • 设置每个菜单项的representedObject。在操作方法中,获取senderrepresentedObject并使用它来控制您的操作。在你的情况下,如果它具有控制菜单应该做什么的信息,则可以使用dic作为representedObject

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

+0

谢谢! 最后,我使用[发件人标题],它不是我的目标最好的,但它可能是工作。 非常感谢您的提示! – xur 2014-10-08 20:29:54

+0

不客气。使用标题几乎从来都不是正确的方法。 – 2014-10-08 20:58:57