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

问题描述 投票:0回答:1

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

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

目前,我正在使用主控制器内的WatchConnectivity接收来自手机的更新。当手机发送一个号码时,代码确定它需要的颜色,然后下面的代码显示WKInterfaceController具有正确的颜色背景:

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

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

那么 - 我该怎么做?我想我只需要一种方法来保持对主动控制器的引用,这样我就可以在激活下一个球之前解除它 - 但我无法弄清楚如何做到这一点。

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

提前致谢

swift watchkit apple-watch wkinterfacecontroller
1个回答
0
投票

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

我错误地认为在WatchKit中覆盖文本的唯一方法是将WKInterfaceController背景设置为图像,然后在其上面放置一个标签 - 但WKInterface控制器的背景图像属性不可用于设置以编程方式,我为我想要使用的每个不同的背景图像创建了一个单独的WKInterfaceController实例。但正如我所料,还有另一种更好的方法。

“group”对象还具有背景图像属性,可以通过编程方式进行设置。

我删除了5个独立的接口控制器,并用1个包含组的接口控制器替换它们,然后我以编程方式将该组的背景图像从session:didReceiveMessage设置为从手机接收的最新数据的相应图像。

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

© www.soinside.com 2019 - 2024. All rights reserved.