我正在使用情节提要为我的应用程序构建NSTouchBar

我想用其他东西代替ESC按钮。

与往常一样,没有文档告诉您如何执行此操作。

我在网上搜索了一些模糊的信息,例如


  您可以将“ esc”的内容更改为其他内容,例如
  通过使用“完成”或其他任何内容,甚至是图标
  使用NSTouchBarItem的escapeKeyReplacementItemIdentifier。


但这太模糊了,难以理解。

有任何想法吗?



这是我到目前为止所做的。

我在情节提要上向NSTouchBar添加了一个按钮,并将其标识符更改为newESC。我以编程方式添加了以下行:

self.touchBar.escapeKeyReplacementItemIdentifier = @"newESC";


当我运行该应用程序时,ESC键现在是不可见的,但仍在栏中占据其空间。旁边应该显示应该替换的按钮。所以那个酒吧

`ESC`, `NEW_ESC`, `BUTTON1`, `BUTTON2`, ...


就是现在

`ESC` (invisible), `NEW_ESC`, `BUTTON1`, `BUTTON2`, ...


旧的ESC仍在栏上占据其空间。

最佳答案

这是通过创建触摸条项目(例如包含NSCustomTouchBarItemNSButton)并将该项目与其自身的标识符相关联来完成的。

然后使用另一个标识符执行常规逻辑,但是将先前创建的标识符添加为ESC替换。

Swift中的快速示例:

func touchBar(_ touchBar: NSTouchBar, makeItemForIdentifier identifier: NSTouchBarItemIdentifier) -> NSTouchBarItem? {

    switch identifier {
    case NSTouchBarItemIdentifier.identifierForESCItem:
        let item = NSCustomTouchBarItem(identifier: identifier)
        let button = NSButton(title: "Button!", target: self, action: #selector(escTapped))
        item.view = button
        return item
    case NSTouchBarItemIdentifier.yourUsualIdentifier:
        let item = NSCustomTouchBarItem(identifier: identifier)
        item.view = NSTextField(labelWithString: "Example")
        touchBar.escapeKeyReplacementItemIdentifier = .identifierForESCItem
        return item
    default:
        return nil
    }

}

func escTapped() {
    // do additional logic when user taps ESC (optional)
}


我还建议对标识符进行扩展(类别),避免使用字符串文字进行拼写错误:

@available(OSX 10.12.2, *)
extension NSTouchBarItemIdentifier {
    static let identifierForESCItem = NSTouchBarItemIdentifier("com.yourdomain.yourapp.touchBar.identifierForESCItem")
    static let yourUsualIdentifier = NSTouchBarItemIdentifier("com.yourdomain.yourapp.touchBar.yourUsualIdentifier")
}

关于macos - 装回NSTouchBar上的ESC按钮,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44862210/

10-13 05:54