Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 使用操作和状态变量连接多个NSMenuItems_Objective C_Cocoa_Binding_Action_Nsmenuitem - Fatal编程技术网

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;//无论哪种方式,菜单项都已启用
}

太棒了!我去看看!非常感谢;-)