Comment revenir dans la stack de navigation?

Mon application dispose de 7 controllers de vue suivants: VC1 – VC7
Dans ma barre de navigation j'ai un button de return avec des actions: tapé et longPressed. Lorsque le backButton est enfoncé longtime dans n'importe quel VC, l'application devrait aller à VC2 et le présenter comme si l'user allait de VC1 à VC2, en particulier: avec l'action du button arrière droit tapé.

C'est mon code pour UILongPressGestureRecognizer:

func longPressAction(gestureRecognizer: UIGestureRecognizer) { if (gestureRecognizer.state == UIGestureRecognizerState.Ended) { println("Long press ended") } else if (gestureRecognizer.state == UIGestureRecognizerState.Began) { println("Long press detected") let mainStoryboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()) let vc: ViewController2 = mainStoryboard.instantiateViewControllerWithIdentifier("vc2") as! ViewController2 navigationController?.pushViewController(vc, animated: true) } } 

Comment puis-je returnner au bon endroit dans la stack de navigation?

Vous pouvez définir votre tableau de controllers View dans le controller de navigation:

 let viewControllersArray = [VC1,VC2] self.navigationController.setViewControllers(viewControllersArray, animated: true) 

MODIFIER

Dans votre scénario

 else if (gestureRecognizer.state == UIGestureRecognizerState.Began) { println("Long press detected") let mainStoryboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()) let vc1: ViewController1 = mainStoryboard.instantiateViewControllerWithIdentifier("vc1") as! ViewController1 let vc2: ViewController2 = mainStoryboard.instantiateViewControllerWithIdentifier("vc2") as! ViewController2 let VCArray = [vc1,vc2] self.navigationController.setViewControllers(VCArray, animated: true) } 

Je peux penser à deux façons d'accomplir ceci:

  1. Définissez VC2 comme controller de vue racine, puis utilisez popToRootViewControllerAnimated . Son propre IMO si VC2 est votre controller principal qui est appelé si souvent.

  2. Maintenez un boolean pour indiquer si VC2 est encore chargé dans la stack. Si elle est chargée, utilisez simplement popToViewController , et si elle n'est pas encore chargée en memory, pushViewController simplement sur pushViewController et appuyez sur VC2.