Интеграция NSTouchBar не вызывает - PullRequest
1 голос
/ 23 октября 2019

Я интегрирую поддержку 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
    }
}

1 Ответ

0 голосов
/ 25 октября 2019

self.view.window?.makeFirstResponder(self) в viewDidLoad() действительно решили проблему.

...