验证NSTouchBar项目的最佳实用方法

时间:2016-11-25 06:42:28

标签: swift cocoa appkit macos-sierra nstouchbar

在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。我不仅要改变物品的可用性,还要根据情况改变它们的图像或颜色。你们如何验证触控条项目?

1 个答案:

答案 0 :(得分:7)

我自己完善了触摸条验证系统,并制作了以下协议和扩展程序。

applicationDidUpdate(:_)

如果已经有AppDelegate的validateTouchBarItem(_:),你应该修改它,但除此之外,不需要添加任何复杂的内容。您现在可以使用validateUserInterfaceItem(_:)或普通D.map2 UserAlias来验证自己的触控条项目了!

我认为这至少可以满足我的要求。