WKInterfaceController's сталоCurrentPage не работает, как ожидалось - PullRequest
1 голос
/ 08 апреля 2019

Я загружаю 4 WKInterfaceControllers в горизонтальный интерфейс на основе страниц в watchKit. enter image description here Когда сработает функция обратного вызова делегата, предупреждающая приложение о том, что экран заблокирован водой, я хочу, чтобы часы переключились на один из контроллеров (в зависимости от настроек пользователя). Используя приведенный ниже код, если делегат срабатывает при блокировке воды, приложение перейдет на MainDisplayInterfaceController, как и ожидалось. Однако, если делегат срабатывает в любом из двух других интерфейсных контроллеров, экран, кажется, переходит, но затем возвращается к исходному WorkoutControlsInterfaceController (т.е. 0), однако элемент управления страницей внизу экрана находится на 2 из 4? Может ли это быть ошибка WatchKit?

РЕДАКТИРОВАТЬ: одна подсказка, которую я заметил, - то, что на первом водном замке я получаю вышеупомянутое поведение. Но если я разблокирую, а затем снова заблокирую, я получу ожидаемое поведение. ?

 class ConfigureWorkoutInterfaceController: WKInterfaceController {
       WKInterfaceController.reloadRootPageControllers(withNames: ["WorkoutControlsInterfaceController", "MainDisplayInterfaceController", "SpeedInterfaceController", "CaloriesAndDistanceInterfaceController"],
                                                            contexts: [contextDictionary, contextDictionary, contextDictionary, contextDictionary],
                                                            orientation: .horizontal,
                                                            pageIndex: 1)
        }
    }

    extension MainDisplayInterfaceController: WaterLockStateDelegate {
        func didUpdateWaterLockState(_ manager: WorkoutManager, state: Bool) {
                     DispatchQueue.main.async {
                        self.becomeCurrentPage()
                    }
        }


    }

    extension SpeedInterfaceController: WaterLockStateDelegate {
        func didUpdateWaterLockState(_ manager: WorkoutManager, state: Bool) {
                     DispatchQueue.main.async {
                        self.becomeCurrentPage()
                    }

    }

    extension CaloriesAndDistanceInterfaceController: WaterLockStateDelegate {
        func didUpdateWaterLockState(_ manager: WorkoutManager, state: Bool) {
                     DispatchQueue.main.async {
                        self.becomeCurrentPage()
                    }
    }
...