2016-11-07 1 views
0

Le lien ci-dessous montre mon Storyboard et je pense que mon problème est beaucoup plus facile à comprendre avec l'image. Mon tabBarController gère un onglet qui est incorporé dans un contrôle de navigation. UIButton "start" mène à la vue suivante par un show segue (flèche bleue). Sur cette vue, un élément de bouton de barre mène au dernier viewController avec un show segue (flèche verte). Depuis le contrôleur de la dernière vue, je veux revenir à mon initiale, encore une fois par un élément de bouton de barre (flèche noire). Mais maintenant il y a le problème, que mon contrôleur de vue initial montre un "bouton de retour" en haut à gauche (bien sûr, parce que par la flèche noire la vue initiale est simplement ajoutée à la pile de navigation, non ?!). J'ai résolu cela en revenant au contrôleur de la barre d'onglets (flèche rouge). Maintenant, il n'y a plus de bouton "retour" mais maintenant je me demande s'il n'y a pas une pile de mes vues de navigation qui existent encore en arrière-plan et qui gaspillent de la mémoire ou quelque chose comme ça. Comment puis-je supprimer cette pile ou est-ce qu'elle existe déjà? (peut-être que je me suis complètement trompé) Ou y a-t-il encore un meilleur moyen de revenir à ma première vue?la suppression d'une 'pile' de vues de navigation Xcode swift

Désolé pour la description non professionnelle de mon problème, mais j'ai juste commencé à coder donc je n'ai pas les bons mots pour certains des problèmes pour le moment.

merci beaucoup!

my Storyboard looks like this

+0

Utilisez un segue segue – PeejWeej

Répondre

1

Si je comprends bien, vous voulez que votre dernier contrôleur de vue pour accéder au contrôleur de vue initial de la pile de navigation. Sur votre dernier contrôleur de vue, vous pouvez ajouter ceci à votre code:

 override func viewDidLoad() { 
    super.viewDidLoad() 
    //this will add a button to top right of the nav bar, 
    //change "ButtonName" to a title you want 
    //this button will call the blackArrow function 
    self.navigationItem.rightBarButtonItem = UIBarButtonItem (
     title: "ButtonName", style: UIBarButtonItemStyle.plain, target: self, action: #selector(self.blackArrow)) 
} 


func blackArrow() { 
//this function navigates to the initial view controller of the navigation controller 
if let navigationController = self.navigationController { 
    navigationController.popToRootViewController(animated: true) 

    } 
} 
+0

merci! Et dois-je supprimer la pile des viewcontrollers ou la pile est-elle réduite au contrôleur de la vue racine si je reviens à celle-là? –

+0

Vous n'avez pas besoin de supprimer la pile de viewcontrollers si vous en avez besoin, et elle n'est pas réduite uniquement au contrôleur de vue racine. Le contrôleur de navigation affiche simplement la vue initiale et vous pouvez naviguer parmi les autres contrôleurs de vue qui y sont connectés, comme la première fois en bleu, puis en vert. –