为什么 NSToolbarItem 会自动禁用?

Why does NSToolbarItem get disabled automatically?

我的 Mac.

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

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

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

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

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

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

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

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

为了解决这个问题,我必须将 NSToolbarItem 子类化并重写其 validate 函数以在其目标上调用 validateToolbarItem,如问题 的答案中所述。