Как я могу объединить "popToRootController" с "pushController" - PullRequest
0 голосов
/ 01 мая 2018

В моем WatchApp есть 3 InterfaceController:

Приложение запускается в StartInterfaceController и переходит к «Target1» InterfaceController, если пользователь нажимает кнопку.

Нажав кнопку в «Target1» InterfaceController, я хочу программно вернуться обратно к «Start» и затем открыть «Target2»

enter image description here

Я попробовал этот код:

В «Target1»:

@IBAction func navigateToTarget2() {
    navigateBack = true // navigateBack is a global variable
    popToRootController()
}

В «Старт»:

override func didAppear() {
    if navigateBack {
        navigateBack = false
        pushController(withName: "Target2", context: nil)
    }
}

Первая часть работает хорошо. Нажатие кнопки в «Target» возвращает обратно к «Start». Код при запуске выполняется (я проверил в отладчике), но навигация к «Target2» не работает. Я также проверил имя цели в операции pushController. У него правильное имя.

1 Ответ

0 голосов
/ 29 мая 2018

Комбинация push и pop не будет выполняться одновременно.

В качестве альтернативы, что вы можете сделать, когда вы нажмете кнопку «Пуск», перейдите к «Target1», нажав на «Старт» контроллера с нулевым контекстом. Когда вы нажимаете кнопку на контроллере «Target1», вы можете вызывать reloadRootControllersWithNames, передавать туда некоторый контекст и создавать условие, которое является кнопкой «Target1», поэтому перейдите к «Target2».

Пример: Это не фактический код.

class StartVC: WKInterfaceController {

 func buttonAction() {
    self.push("TargetOneVC", context: nil)
 }

}

class TargetOneVC: WKInterfaceController {

 func buttonAction() {
     WKInterfaceController.reloadRootControllersWithNames(["TargetTwoVC"], 
     contexts: [isFromTargetOne: true])
  }
}

class TargetTwoVC: WKInterfaceController {

}
...