我正在使用情节提要为我的应用程序构建NSTouchBar
。
我想用其他东西代替ESC
按钮。
与往常一样,没有文档告诉您如何执行此操作。
我在网上搜索了一些模糊的信息,例如
您可以将“ esc”的内容更改为其他内容,例如
通过使用“完成”或其他任何内容,甚至是图标
使用NSTouchBarItem的escapeKeyReplacementItemIdentifier。
但这太模糊了,难以理解。
有任何想法吗?
这是我到目前为止所做的。
我在情节提要上向NSTouchBar
添加了一个按钮,并将其标识符更改为newESC
。我以编程方式添加了以下行:
self.touchBar.escapeKeyReplacementItemIdentifier = @"newESC";
当我运行该应用程序时,
ESC
键现在是不可见的,但仍在栏中占据其空间。旁边应该显示应该替换的按钮。所以那个酒吧`ESC`, `NEW_ESC`, `BUTTON1`, `BUTTON2`, ...
就是现在
`ESC` (invisible), `NEW_ESC`, `BUTTON1`, `BUTTON2`, ...
旧的
ESC
仍在栏上占据其空间。 最佳答案
这是通过创建触摸条项目(例如包含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")
}
关于macos - 装回NSTouchBar上的ESC按钮,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44862210/