如何将“popToRootController”与“pushController”结合起来

时间:2018-05-01 16:12:31

标签: swift watchkit apple-watch

我的WatchApp中有3个InterfaceControllers:

如果用户触摸按钮,应用程序将在StartInterfaceController中启动并导航到“Target1”InterfaceController。

按下“Target1”中的按钮InterfaceController我想以编程方式导航回“开始”,然后打开“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 :(得分:1)

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 {

}