2012-03-19 18 views
1

我不知道怎麼形容我需要什麼,但我給它一個嘗試,通過一個例子:連接多個NSMenuItems用動作和狀態變量

比方說,我們有一個窗口和一個側欄,和想切換它(我的意思是側邊欄:開/關)。

現在,讓我們也說:

  • 用戶可以在主菜單中通過一個項目切換欄(如顯示側邊欄/隱藏側邊欄)
  • 用戶也可以通過切換側邊欄按鈕
  • 而且還有另一個項目,在一些其他的菜單,做同樣的事情(顯示/隱藏側邊欄)

什麼是最實用的可可友好的方式來實現這一目標?

當然,這意味着,例如:

  • 當有人點擊從側邊欄(顯示或隱藏),菜單項,現在必須顯示側邊欄的當前狀態的按鈕,除了(例如,「顯示欄」現在必須轉向「隱藏邊欄」在菜單內的所有可能的情況下等)

我希望你能明白;這絕對不是一件難事;但我對如何使用Cocoa的所有技巧快速完成工作感到困惑。

謝謝!

回答

3

我假設你有一些控制器對象,它實現了一個動作-toggleSidebar:,並且這兩個菜單都指向同一個控制器。另外,在控制器中,您保留一個實例變量BOOL isSidebarShown

使您的控制器執行NSUserInterfaceValidations協議。類似這樣的:

- (BOOL)validateUserInterfaceItem:(id <NSValidatedUserInterfaceItem>)anItem 
{ 
    if (anItem.action == @selector(toggleSidebar:) && [anItem isKindOfClass:[NSMenuItem class]]) 
    { 
     NSString* title = isSidebarShown ? @"Hide Sidebar" : @"Show Sidebar"; 
     [(NSMenuItem*)anItem setTitle:title]; 
    } 

    return YES; // either way, the menu item is enabled 
} 
+0

太棒了!我會檢查出來的!非常感謝 ;-) – 2012-03-19 03:10:56