Touch Bar - 如何将默认文本字段项目与自定义项目组合

NSTouchBar - how to combine default text filed items with custom items

我试图在编辑文本字段时将我的自定义触摸栏项目与触摸栏中的自动文本建议结合起来。

目前我正在自定义 NSTextView 中覆盖 makeTouchBar class,如果我不这样做,将为 textView 创建默认触摸栏。

这是主要的 makeTouchBar,我尝试在其中添加带有项目标识符 .candidateList 的建议,但没有成功:

extension ViewController: NSTouchBarDelegate  {
    override func makeTouchBar() -> NSTouchBar? {

        let touchBar = NSTouchBar()

        touchBar.delegate = self

        touchBar.customizationIdentifier = .myBar

        touchBar.defaultItemIdentifiers = [.itemId1, 
                .flexibleSpace, 
                .itemId2, 
                .itemId3, 
                .flexibleSpace, 
                .candidateList]

        touchBar.customizationAllowedItemIdentifiers = [.itemId1]

        return touchBar
    }
}

有人可以提供一个简单的例子来说明如何将这个单词建议项目添加到自定义触摸栏吗?

简单。只需在您的自定义 NSTextView class:

中调用 super
override func makeTouchBar() -> NSTouchBar {
    var touchBar = super.makeTouchBar()
    touchBar.delegate = self
    var defaultIdentifiers = [Any](arrayLiteral:touchBar.defaultItemIdentifiers)
    defaultIdentifiers.insert("CustomLabel", at: 0)
    touchBar.defaultItemIdentifiers = defaultIdentifiers
    return touchBar
}

override func touchBar(_ touchBar: NSTouchBar, makeItemFor identifier: NSTouchBarItemIdentifier) -> NSTouchBarItem {
    if (identifier == "CustomLabel") {
        var button = NSButton(title: "Custom", target: self, action: nil)
        var item = NSCustomTouchBarItem(identifier: "CustomLabel")
        item.view = button
        item.customizationLabel = "Custom"
        return item
    }
    else {
        return super.touchBar(touchBar, makeItemFor: identifier)
    }
    return nil
}