如何在 watchOS 中获取接口控制器的实时实例?

How to get live instance of interface controller in watchOS?

在我的 ExtensionDelegate 中,我想要获得我的一个界面控制器的实例。我正在使用基于页面的导航。

例如,我可以在 iOS 中这样做:

if let controller = self.tabBarController?.viewControllers?[1] as? TimesController {
 controller.myVariable = nil
}

如何在 watchOS 中执行此操作?

你不能。 watchOS 上没有页面视图控制器的概念,它可以容纳一组界面控制器。

由于您无法传递另一个上下文来准备页面转场,因此您需要在其 willActivate() 方法中更新该特定接口控制器的 属性:

override func willActivate() {
    super.willActivate()
    myVariable = ...
}

使用以下代码:

guard let interface = WKExtension.shared().rootInterfaceController as? InterfaceController else {
    return
}

从 Watch OS 4+ 开始,我们可以使用 visibleInterfaceController:

WKExtension.shared().visibleInterfaceController

visibleInterfaceController

Returns the last visible interface controller.

Ref: https://developer.apple.com/documentation/watchkit/wkextension/2868459-visibleinterfacecontroller