#ios #swift #watchkit #apple-watch #wkinterfacecontroller
#iOS #swift #watchkit #apple-watch #wkinterfacecontroller
Вопрос:
Я загружаю 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()
}
}