为什么NSToolbarItem会自动禁用?

时间:2018-03-21 15:48:04

标签: macos cocoa appkit nsbutton nstoolbar

我的Mac幻灯片应用程序工具栏中的按钮存在一些问题。

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

didSet

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

我在var slideshow: Slideshow? { didSet { self.playPauseButton.isEnabled = slideshow != nil } } 上设置了一个断点,以确认幻灯片在某些时候未设置为didSet。我也没有修改代码中其他地方的nil。为了进行测试,我设置了isEnabled而不是isEnabled = true只是为了看看会发生什么,然后结果显示按钮保持启用状态。

可能有一些AppKit因为某些我不知道的原因而自动禁用按钮?我希望有人可能有个主意。

1 个答案:

答案 0 :(得分:1)

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

确实证明了NSToolbarItems的验证问题,如暗示链接的问题。但是,简单地覆盖我的NSWindowController子类中的函数HAVING没有完成任务,因为没有为其中包含视图的NSToolbarItem调用该函数(see Apple's documentation)。

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