为什么 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
,如问题 的答案中所述。
我的 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
,如问题