【发布时间】:2023-04-01 09:27:01
【问题描述】:
在 AppKit 上,菜单项和工具栏项分别具有 validateMenuItem(_:) 和 validateToolbarItem(_:)。但是,对于新的触摸栏项目,没有这种方便的方法可以在正确的时刻验证适当的项目。
我现在每次更改相关值并调用didSet 中的验证方法时都会验证触摸栏项目(请参阅以下示例代码)。但是我觉得这不是一个好方法,因为相关值必须知道有一个touch bar item依赖它。
var foo: Foo? {
didSet {
if #available(macOS 10.12.1, *), NSClassFromString("NSTouchBar") != nil {
self.validateTouchBarItem(identifier: .foo)
}
}
}
@available(macOS 10.12.1, *)
func validateTouchBarItem(identifier: NSTouchBarItemIdentifier) {
guard
let item = self.touchBar?.item(forIdentifier: identifier),
let button = item.view as? NSButton
else { return }
switch identifier {
case NSTouchBarItemIdentifier.foo:
button.isEnabled = (self.foo != nil)
default: break
}
}
我使用的另一种方法是 Cocoa-binding 和 KVO,但是,它并不总是很好用。
所以,我很好奇是否有任何推荐或事实上的标准方法来验证触摸栏项目,尤其是包含 NSButton 和 NSSegmentedControl。我不仅想改变物品的可用性,有时还想根据情况改变它们的图像或颜色。你们如何验证触摸栏项目?
【问题讨论】:
标签: swift cocoa appkit macos-sierra nstouchbar