AppKit では、メニュー項目とツールバー項目にはそれぞれ と がvalidateMenuItem(_:)
ありvalidateToolbarItem(_:)
ます。ただし、新しいタッチ バー アイテムでは、適切なアイテムを適切なタイミングで検証するための便利な方法はありません。
関連する値を変更して検証メソッドを呼び出すたびに、タッチ バー項目を検証してdidSet
います (次のサンプル コードを参照してください)。しかし、関連する値はそれに依存するタッチバーアイテムがあることを知っている必要があるため、それは良い方法ではないと感じています.
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 バインディングと KVO ですが、常にうまく機能するとは限りません。
したがって、特に NSButton と NSSegmentedControl を含む、タッチ バー アイテムを検証するための推奨される方法または事実上の標準の方法があるかどうかに興味があります。在庫状況だけでなく、場合によっては画像や色も変えたい。タッチバーアイテムをどのように検証しますか?