【问题标题】:Why does NSToolbarItem get disabled automatically?为什么 NSToolbarItem 会自动禁用?
【发布时间】:2018-03-21 15:48:03
【问题描述】:

我的 Mac 幻灯片应用程序工具栏中的按钮有点问题。

我希望在没有活动幻灯片时禁用这些按钮,并在有活动幻灯片时启用这些按钮。为了实现这一点,我在开始时将按钮的isEnabled 属性设置为false(我已经尝试过Interface Builder 和我的窗口的windowDidLoad),然后在我的幻灯片变量的didSet 中执行以下:

var slideshow: Slideshow? {
    didSet {
        self.playPauseButton.isEnabled = slideshow != nil
    }
}

发生的情况是按钮(本例中只有一个)启用了大约半秒,然后再次禁用。

我在didSet 上设置了一个断点,以确认幻灯片在某些时候没有设置为nil。我也没有在我的代码中的其他任何地方修改isEnabled。为了测试,我设置了 isEnabled = true 而不是 false 只是为了看看会发生什么,结果发现按钮保持启用状态。

AppKit 的某些部分是否会由于某种我不知道的原因自动禁用按钮?我希望有人可能有一个想法。

【问题讨论】:

标签: macos cocoa appkit nsbutton nstoolbar


【解决方案1】:

好的,我设法解决了这个问题。

事实证明,NSToolbarItems 的验证确实存在问题,如 matt 链接到的问题。但是,在我的 NSWindowController 子类中简单地覆盖函数 validateToolbarItem 并没有完成这项工作,因为没有为带有视图的 NSToolbarItems (see Apple's documentation) 调用该函数。

为了解决这个问题,我必须继承 NSToolbarItem 并覆盖其 validate 函数以在其目标上调用 validateToolbarItem,如问题 here 的答案中所述。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-24
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 2011-04-04
    • 2018-09-22
    相关资源
    最近更新 更多