swift - 在 Xcode Playgrounds 中实现 TouchBar 功能

标签 swift xcode swift-playground nstouchbar

如何在仅使用 Xcode Playgrounds 的情况下实现 NSTouchBar?我意识到 NSTouchBar 及其附带的方法包括 makeTouchBar() 包含在 NSResponder 类中,它是 NSView 的父类(super class)NSViewControllerNSWindowSKView(NSView 的子类。)

正是出于这个原因,我有点不确定如何访问 TouchBar。 NSResponder 的子类太多了,我不确定哪一个是正确的。据我所知,我什至无法访问所有这些,包括 Playground 的 NSWindow,我怀疑它可能是我需要访问的。

我当前的设置是:

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

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

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

对于 SKScene:

<SKView: 0x7fba36037a00>
<NSView: 0x7fba32d6fe80>
<PlaygroundViewBridgeService: 0x7fba32d569e0>
<NSNextStepFrame: 0x7fba32d76e20>
<NSWindow: 0x7fba32e177e0>

由于某些原因,SKScene 和 SKView 不在同一个链中,我似乎无法访问任何高于 SKView 的响应者。有没有办法扩展现有的 NSWindow 的功能?

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

如能提供在 Storyboards 中实现 TouchBar 的任何帮助,我们将不胜感激。

最佳答案

解决方法其实很简单。创建 NSViewController 的自定义子类并在其中实现 TouchBar 覆盖功能。

然后执行上面的代码:

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

添加了以下内容。

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

这会在响应链中设置您的自定义 NSViewController,允许它处理 Touch Bar。也无需担心 App Delegate。

关于swift - 在 Xcode Playgrounds 中实现 TouchBar 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43150641/

相关文章:

ios - CoreData中如何将数据存储为多对多关系?

swift - 如何在 Swift 字符串中存储\">?

ios - 如何在 Playground 中编辑描述(不是代码)

UITableViewRowAction : Delete

swift - 将可选绑定(bind)转换为非可选绑定(bind)

ios - Swift 中的 ABAddressBook iOS 8 内存泄漏

ios - Swift Playgrounds 以不同速度运行时崩溃

ios - uicollectionview - 数据自动加载而不调用 reloaddata

ios - uinavigationcontroller 内的选项卡栏 Controller

ios - 将 IOS 应用上传到应用商店。似乎卡住并且互联网停止工作