【问题标题】:how to enable/disable NSToolbarItem如何启用/禁用 NSToolbarItem
【发布时间】:2011-11-05 02:48:19
【问题描述】:

我有一个项目需要禁用/启用某些 NSToolbarItems 取决于不同的选项。我查了一下,没有找到这个参数。

有没有办法启用/禁用给定的NSToolbarItem

【问题讨论】:

    标签: objective-c cocoa nstoolbar nstoolbaritem


    【解决方案1】:

    在您的窗口、视图或文档控制器中实现 NSToolbarItemValidation 协议。该文档提供了以下示例代码:

    -(BOOL)validateToolbarItem:(NSToolbarItem *)toolbarItem {
    
        BOOL enable = NO;
        if ([[toolbarItem itemIdentifier] isEqual:SaveDocToolbarItemIdentifier]) {
    
            // We will return YES (enable the save item)
            // only when the document is dirty and needs saving
            enable = [self isDocumentEdited];
    
        } else if ([[toolbarItem itemIdentifier] isEqual:NSToolbarPrintItemIdentifier]) {
    
            // always enable print for this window
            enable = YES;
        }
        return enable;
    }
    

    您还可以使用actiontag 来确定正在验证的工具栏项。每当您的应用被激活或事件被调度时,项目都会被频繁验证,因此它们将始终处于有效状态。

    【讨论】:

    • 没那么快。 Apple 说:“...此消息是从 NSToolbarItem 的 validate 方法发送的,但是 validate 不会为具有自定义视图的项目发送此消息。”所以如果你有一个按钮,这将不起作用
    【解决方案2】:

    有一个更简单的解决方案:

    -(BOOL)validateToolbarItem:(NSToolbarItem *)toolbarItem
    {
    
        return [toolbarItem isEnabled] ;
    }
    

    这样你就可以使用 [yourToolBarItem setEnabled:YES/NO] ;在你的代码中。

    【讨论】:

    • 干净漂亮,属于面料类
    【解决方案3】:

    一种快速完成此操作的简单方法,或者您可以将其移植到目标 c 是设置操作

    这会禁用该项目

    Mytoolbar.action = nil
    

    这会重新启用它

    Mytoolbar.action = "Name of a function"
    

    在执行此操作时,您需要用函数替换您的 IBAction

    @IBAction func blehbleh(sender: AnyObject){ Stuff }
    

    将改为

    func blehbleh(){ Stuff }
    

    【讨论】:

      【解决方案4】:

      正如 nsij22 所说,您需要设置操作。

      在 Storyboard 中,只需 ctrl+从工具栏项拖动到您的代码操作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多