Я загружаю 4 WKInterfaceControllers в горизонтальный интерфейс на основе страниц в watchKit. Когда сработает функция обратного вызова делегата, предупреждающая приложение о том, что экран заблокирован водой, я хочу, чтобы часы переключились на один из контроллеров (в зависимости от настроек пользователя). Используя приведенный ниже код, если делегат срабатывает при блокировке воды, приложение перейдет на 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()
}
}