在Xcode Playgrounds中实现TouchBar功能

时间:2017-03-31 22:36:42

标签: swift xcode swift-playground nstouchbar

如何仅使用Xcode Playgrounds实现NSTouchBar?我意识到NSTouchBar及其附带的方法(包括makeTouchBar())包含在NSResponder类中,该类是NSViewNSViewController,{{1的超类}和NSWindowSKView的子类。)

由于这个原因,我有点不确定如何接近TouchBar。 NSView我有很多子类,我不确定哪一个是正确的子类。据我所知,我甚至无法访问所有这些内容,包括Playground的NSResponder,我怀疑这可能是我需要访问的内容。

我目前的设置是:

NSWindow

在检查响应者链时,对于SKView,我得到了:

let containerView = SKView()
PlaygroundPage.current.liveView = containerView
let containterScene = SKScene()
containerView.presentScene(containterScene)

对于SKScene:

<SKScene> name:'(null)' frame:{{-250, -250}, {500, 500}} anchor:{0.5, 0.5}

出于某种原因,SKScene和SKView不在同一个链中,我似乎无法访问任何高于SKView的响应者。有没有办法扩展现有<SKView: 0x7fba36037a00> <NSView: 0x7fba32d6fe80> <PlaygroundViewBridgeService: 0x7fba32d569e0> <NSNextStepFrame: 0x7fba32d76e20> <NSWindow: 0x7fba32e177e0> 的功能?

另一个问题是许多关于使用TouchBar的教程都需要访问AppDelegate,我不认为我在Xcode Storyboards中有这个。

非常感谢在Storyboard中实现TouchBar的任何帮助。

1 个答案:

答案 0 :(得分:1)

解决方案实际上非常简单。创建NSViewController的自定义子类,并在其中实现TouchBar覆盖功能。

然后实现上面的代码:

let containerView = CustomSKView()
let containterScene = CustomSKScene()
containerView.presentScene(containerScene)

添加以下内容。

let containerViewController = CustomNSViewController()
containerViewController.view = containerView
PlaygroundPage.current.liveView = containerViewController.view

这会在响应程序链中设置自定义NSViewController,以便它可以处理触控栏。也无需担心App Delegate。