Как получить живой экземпляр контроллера интерфейса в watchOS?

В моем ExtensionDelegateЯ хотел бы получить экземпляр одного из моих контроллеров интерфейса. Я использую навигацию на основе страниц.

Например, я могу сделать это в iOS как это:

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

Как я могу сделать это в watchOS?

2 ответа

Решение

Ты не можешь В 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

Возвращает последний видимый контроллер интерфейса.

Ссылка: https://developer.apple.com/documentation/watchkit/wkextension/2868459-visibleinterfacecontroller

Другие вопросы по тегам