更换NSTouchBar上的ESC按钮

时间:2017-07-01 14:45:43

标签: macos cocoa nstouchbar

我正在使用storyboard为我的应用构建NSTouchBar

我想用其他内容替换ESC按钮。

像往常一样,没有文件告诉你如何做到这一点。

我在网上搜索过,我发现了像

这样的模糊信息
  

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

但这太模糊了,无法理解。

有什么想法吗?

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

我在故事板上为NSTouchBar添加了一个按钮,并将其标识符更改为newESC。我以编程方式添加了这一行:

self.touchBar.escapeKeyReplacementItemIdentifier = @"newESC";

当我运行App时,ESC键现在不可见但仍占据栏上的空间。应该替换它的按钮出现在它旁边。那条酒吧

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

现在是

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

ESC仍占据栏上的空间。

1 个答案:

答案 0 :(得分:2)

这是通过创建一个触摸栏项目来完成的,假设NSCustomTouchBarItem包含NSButton,并将此项目与其自己的标识符相关联。

然后使用另一个标识符,您可以执行常用逻辑,但是将先前创建的标识符添加为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")
}