如何在viewcontroller

时间:2017-02-20 10:34:07

标签: swift macos nstouchbar

我想开发一款带触控条的应用。我在互联网上搜索并看到了一些教程。他们都使用windowcontroller进行演示,只需覆盖makeTouchBar()或在storyboard中拖动触摸栏,然后有一个触摸栏。但是我想在viewcontroller中使touchbar变得不同。然后我将一个触摸条拖入故事板中的viewcontroller并在viewcontroller中绑定触摸条。

enter image description here

bind(#keyPath(touchBar), to: self, withKeyPath: #keyPath(touchBar), options: nil)

但是当我运行项目时,我找不到触摸栏,然后打印touchbar.isVisible,我发现该值为false。

image description here

那么如何在viewcontroller中显示触摸栏。谢谢!

2 个答案:

答案 0 :(得分:5)

你可以在ViewController中试试这个,它对我有用:

override func viewDidAppear() {
        super.viewDidAppear()
        self.view.window?.unbind(#keyPath(touchBar)) // unbind first
        self.view.window?.bind(#keyPath(touchBar), to: self, withKeyPath: #keyPath(touchBar), options: nil)
}

答案 1 :(得分:2)

实际上Loys的答案是对的。

系统的NSTouchBar发现如下表所示从下到上显示:

  1. App delegate
  2. App对象
  3. 主窗口的控制器
  4. 主窗口的代表
  5. 主窗口
  6. 主窗口的第一响应者
  7. 关键窗口的控制器
  8. 关键窗口的代理
  9. 关键窗口
  10. 关键窗口的第一响应者
  11. 这意味着它会尝试在windowcontroller或app delegate中找到它。

    但你可以覆盖它,将这些代码放在viwController中解开窗口的touchBar并将其绑定到视图。

     deinit {
            self.view.window?.unbind(#keyPath(touchBar))
        }
    
        override func viewDidAppear() {
            super.viewDidAppear()
            if #available(OSX 10.12.1, *) {
               self.view.window?.unbind(#keyPath(touchBar)) // unbind first
               self.view.window?.bind(#keyPath(touchBar), to: self, withKeyPath: #keyPath(touchBar), options: nil)
            }
        }
    

    参考:

    NSTouchBar Documentation

    WWDC Sample Code - >在此示例中,它将nstouchbar绑定到视图控制器。