连接多个NSMenuItems在行为和状态变量 [英] Connecting Multiple NSMenuItems with Actions and State Variables

查看:731
本文介绍了连接多个NSMenuItems在行为和状态变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不知道怎么形容我需要什么,但我给它一个尝试,通过一个例子:

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆