2014-10-08 49 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