Я интегрирую поддержку TouchBar в свое приложение. Я использовал инструкцию «как» от Рей Вендерлиха и реализовал все следующим образом:
Если заполнить self.touchBarArray
, метод makeTouchBar()
возвращает объект NSTouchBar. Если я распечатываю некоторые тесты, объект identifiers
заполняется и работает.
Что не работает, так это то, что метод makeItemForIdentifier
не запускается. Таким образом, элементы не создаются, а сенсорная панель по-прежнему пуста.
Странное поведение: Если я добавлю print(touchBar)
и точку останова перед возвратом объекта NSTouchBar, он будет работать, и сенсорная панель будет представленакак следует (также срабатывает функция makeItemForIdentifier
). Даже если он исчезает через несколько секунд ... тоже странно.
@available(OSX 10.12.2, *)
extension ViewController: NSTouchBarDelegate {
override func makeTouchBar() -> NSTouchBar? {
if(self.touchBarArray.count != 0) {
let touchBar = NSTouchBar()
touchBar.delegate = self
touchBar.customizationIdentifier = NSTouchBarCustomizationIdentifier("com.TaskControl.ViewController.WorkspaceBar")
var identifiers: [NSTouchBarItemIdentifier] = []
for (workspaceId, _) in self.touchBarArray {
identifiers.append(NSTouchBarItemIdentifier("com.TaskControl.ViewController.WorkspaceBar.\(workspaceId)"))
}
touchBar.defaultItemIdentifiers = identifiers
touchBar.customizationAllowedItemIdentifiers = identifiers
return touchBar
}
return nil
}
func touchBar(_ touchBar: NSTouchBar, makeItemForIdentifier identifier: NSTouchBarItemIdentifier) -> NSTouchBarItem? {
if(self.touchBarArray.count != 0) {
for (workspaceId, data) in self.touchBarArray {
if(identifier == NSTouchBarItemIdentifier("com.TaskControl.ViewController.WorkspaceBar.\(workspaceId)")) {
let saveItem = NSCustomTouchBarItem(identifier: identifier)
let button = NSButton(title: data["name"] as! String, target: self, action: #selector(self.touchBarPressed))
button.bezelColor = NSColor(red:0.35, green:0.61, blue:0.35, alpha:1.00)
saveItem.view = button
return saveItem
}
}
}
return nil
}
}