Objective c 使用操作和状态变量连接多个NSMenuItems
我不确定如何描述我需要什么,但我会通过一个例子来尝试: 假设我们有一个窗口和一个侧边栏,并且想要切换它(我指的是侧边栏:开/关) 现在,我们还要说:Objective c 使用操作和状态变量连接多个NSMenuItems,objective-c,cocoa,binding,action,nsmenuitem,Objective C,Cocoa,Binding,Action,Nsmenuitem,我不确定如何描述我需要什么,但我会通过一个例子来尝试: 假设我们有一个窗口和一个侧边栏,并且想要切换它(我指的是侧边栏:开/关) 现在,我们还要说: 用户可以通过主菜单上的一个项目(例如显示侧边栏/隐藏侧边栏)切换侧边栏 用户还可以通过按钮切换侧栏 在其他菜单中,还有另一项可以做同样的事情(显示/隐藏侧边栏) 实现这一目标的最实际的可可友好方法是什么 当然,这意味着,例如: 当有人单击按钮时,除了侧边栏(显示或隐藏),菜单项现在必须显示侧边栏的当前状态(例如,在菜单中所有可能的实例中,“显
- 用户可以通过主菜单上的一个项目(例如显示侧边栏/隐藏侧边栏)切换侧边栏
- 用户还可以通过按钮切换侧栏
- 在其他菜单中,还有另一项可以做同样的事情(显示/隐藏侧边栏)
- 当有人单击按钮时,除了侧边栏(显示或隐藏),菜单项现在必须显示侧边栏的当前状态(例如,在菜单中所有可能的实例中,“显示侧边栏”现在必须变为“隐藏侧边栏”,等等)
谢谢 我假设您有一个控制器对象,它实现了一个操作
-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
}
-(BOOL)validateUserInterfaceItem:(id)anItem
{
if(anItem.action=@selector(toggleSidebar:)&&[anItem iskindof类:[NSMenuItem类]]
{
NSString*title=isSidebarShown?@“隐藏侧栏”:@“显示侧栏”;
[(NSMenuItem*)项目集合标题:标题];
}
返回YES;//无论哪种方式,菜单项都已启用
}
太棒了!我去看看!非常感谢;-)