我正在使用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
仍占据栏上的空间。
答案 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")
}