如何从另一个控制器中解雇 WKInterfaceController?

How to dismiss WKInterfaceController from another controller?

我正在创建我的第一个 WatchOS 应用程序作为 iOS 应用程序的伴侣。

Watch App 需要能够显示号码从 phone 发送的宾果球。由于我无法使用 WatchOS 叠加图像,因此我创建了 6 个 WKInterfaceController。一个是 'main' 控制器,另外 5 个都有一个独特的背景图像,它是正确颜色(蓝色、红色、灰色、绿色和黄色)的宾果球,然后我用球字母覆盖一个标签和编号(即 B14)。我找不到动态操作单个 WKInterfaceController 的背景图像的方法 - 但如果有办法这样做 - 我将非常感谢有关如何执行此操作的提示,我的其他问题将不存在。

目前,我在主控制器中使用 WatchConnectivity 来接收来自 phone 的更新。当 phone 发送一个数字时,代码确定它需要的颜色,然后以下代码向 WKInterfaceController 呈现正确的颜色背景:

let nextName = "\(ballColor)Controller"
DispatchQueue.main.async {
    self.presentController(withName: nextName, context: message)
    WKInterfaceDevice().play(.click)
}

我遇到的问题是,一旦我激活了第一个颜色控制器,我就无法在不关闭当前激活的颜色控制器的情况下激活不同的颜色控制器。

所以 - 我该怎么做?我想我只需要一种方法来保存对活动控制器的引用,这样我就可以在为下一个球激活控制器之前将其关闭 - 但我不知道该怎么做。

如果有人能帮我指出正确的方向,我将不胜感激……

提前致谢

不知道我原来的问题有没有答案。据我所知,似乎不可能存储对活动 WKInterfaceController 的引用并从另一个控制器与其交互 - 但我确实找到了解决我的潜在问题的方法。我会发布我的发现,以防其他人像我一样陷入困境。

我误以为在 WatchKit 中将文本叠加在图形上的唯一方法是将 WKInterfaceController 背景设置为图像,然后在其上放置标签 - 但背景图像 属性 的 WKInterface Controller 无法以编程方式设置,因此我为每个我想使用的不同背景图像创建了一个单独的 WKInterfaceController 实例。但正如我所料,还有另一种更好的方法。

"group" 对象也有背景图像 属性 并且 可以通过编程方式设置它。

我删除了我的 5 个单独的界面控制器,并将它们替换为 1 个包含一个组的界面控制器,然后我以编程方式从 session:didReceiveMessage 中设置组的背景图像,使其成为从中接收到的最新数据的适当图像phone。

唯一仍然存在的复杂性是我仍然无法从我的主 WKInterfaceController 操作此 WKInterfaceController 上的任何内容,该主 WKInterfaceController 也用作我的 WCSessionDelegate。我发现处理这个问题的唯一方法是通过在呈现第二个控制器之前立即从 session:didReceiveMessage 函数中将 WCSession.default.delegate 设置为 nil 来停用 WCsession,然后在 awake:withContext 中再次激活它第二个控制器也需要我导入 WatchConnectivity 并符合 WCSessionDelegate。