6

我想开发一个带有触摸栏的应用程序。我在互联网上搜索并看到了一些教程。他们都使用 windowcontroller 制作了一个演示,只需makeTouchBar()在故事板中覆盖或拖动触摸栏,然后就有一个触摸栏。但我想让触摸栏在视图控制器中有所不同。然后我将触摸栏拖到情节提要中的视图控制器中,并在视图控制器中绑定触摸栏。

在此处输入图像描述

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

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

图片说明在这里

那么如何在视图控制器中显示触摸栏。谢谢!

4

2 回答 2

6

你可以在 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)
}
于 2017-03-18T05:43:32.750 回答
2

实际上,Loys 的回答是正确的。

系统发现 NSTouchBar 的过程如下列表中从下到上所示:

  1. 应用委托
  2. 应用对象
  3. 主窗口的控制器
  4. 主窗口的委托
  5. 主窗口
  6. 主窗口的第一响应者
  7. 关键窗口的控制器
  8. 关键窗口的代表
  9. 关键窗口
  10. 关键窗口的第一响应者

这意味着它将尝试在窗口控制器或应用程序委托中查找。

但是你可以重写它,把这些代码放在 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 文档

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

于 2017-07-05T17:52:27.790 回答