2017-02-20 59 views
4

我想开发带触摸条的应用程序。我在网上搜索并看到一些教程。他们都使用windowcontroller进行演示,只是覆盖makeTouchBar()或拖动故事板中的触摸条,然后有一个触摸条。但是我想让触摸板在视图控制器中有所不同。然后,我将一个触摸板拖入故事板中的视图控制器,并将视频控制器中的触摸板绑定。如何在视图控制器中显示触摸条

enter image description here

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

但是当我运行的项目,我无法找到我的触摸栏,然后我打印touchbar.isVisible,我发现该值是假的。

image description here

所以如何显示在一个视图 - 控制一个触摸栏。谢谢!

回答

2

您可以在视图控制器试试这个,它为我工作:

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

其实Loys'答案是正确的。

NSTouchBar发现由系统进行从底部到顶部在该列表中示出:

  1. 应用程序委托
  2. App对象
  3. 主窗口的控制器
  4. 主窗口的委托
  5. 主窗口
  6. 主窗口的第一响应者
  7. 主要窗口的控制器
  8. 重点窗口的委托
  9. 键窗口
  10. 重点窗口的第一个响应者

这意味着它将尝试在windowcontroller或应用程序委托找到。

但是你可以重写它,把这些代码放在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查看控制器。

相关问题