连接多个NSMenuItems在行为和状态变量 [英] Connecting Multiple NSMenuItems with Actions and State Variables
问题描述
我不知道怎么形容我需要什么,但我给它一个尝试,通过一个例子:
I'm not sure how to describe what I need but I'll give it a try, via an example :
让我们说我们有一个窗口和一个侧边栏,并希望切换它。(我指的是侧边栏:开/关)
Let's say we have a window and a sidebar, and want to toggle it (I mean the sidebar : on/off).
现在,让我们也说:
- 的用户可以通过一个项目在主菜单切换侧边栏(如边栏显示/隐藏边栏)
- 用户也可以通过一个按钮切换侧边栏
- 而且还有另一个项目,在其他一些菜单,做同样的事情(显示/隐藏侧边栏)
什么是最实用的可可友好的方式来实现这一目标?
What would be the most practical Cocoa-friendly approach to achieve that?
当然,这意味着,例如
- 当有人点击从侧边栏(显示或隐藏),菜单项,现在必须显示侧边栏的当前状态按钮,除了(例如,显示栏现在必须在所有可能的情况下,转向隐藏边栏菜单中,等)
我希望你的想法;这绝对不是什么困难的;但我确实感到困惑我如何可以使用所有的Cocoa的技巧,做快。
I hope you get the idea; it's definitely not something difficult; but I'm definitely confused on how I could use all of Cocoa's tricks to do it fast.
谢谢!
推荐答案
我假设你有一个实现一个动作 -toggleSidebar一些控制器对象:
,并且这两个菜单定位的相同的控制器。此外,在控制器,你保持一个实例变量 BOOL isSidebarShown
。
I'm assuming you have some controller object which implements an action -toggleSidebar:
, and that both menus target the same controller. Also, in the controller, you keep an instance variable BOOL isSidebarShown
.
请您的控制器执行 NSUserInterfaceValidations
的协议。事情是这样的:
Make your controller implement the NSUserInterfaceValidations
protocol. Something like this:
- (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
}
这篇关于连接多个NSMenuItems在行为和状态变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!