如何仅使用Xcode Playgrounds实现NSTouchBar
?我意识到NSTouchBar
及其附带的方法(包括makeTouchBar()
)包含在NSResponder
类中,该类是NSView
,NSViewController
,{{1的超类}和NSWindow
(SKView
的子类。)
由于这个原因,我有点不确定如何接近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的任何帮助。
答案 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。