如何在 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
在我的 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