0

Je suis peu confus au sujet de la pile UINavigationController. Je montre mon UIViewController("SubmitRequestViewController") de mon rootViewController("ViewController").ViewController est appelé plusieurs fois de mon rootViewController

Ci-dessous mon code:

let controller = SubmitRequestViewController.init(nibName: "SubmitRequestViewController", bundle: nil) 
    self.navigationController?.pushViewController(controller, animated: true) 

Maintenant, je suis juste essayer de revenir de SubmitRequestViewController à mon rootViewController.

//Home Button 
@objc fileprivate func backHome() { 
    let _ = self.navigationController?.popToRootViewController(animated: true) 
} 

//Back Button 
@objc fileprivate func backButton() { 
    let _ = self.navigationController?.popViewController(animated: true) 
} 

Si je vais à nouveau à mon « SubmitRequestViewController » ça devient deux fois appel.

Donc, cela continue sans interruption. Il appellera plusieurs fois si je répète les étapes ci-dessus.

Maintenant ce que je suis arrivé est: -

navigationController.viewControllers.count devient augmenté continuesly.

J'essaie d'apparaître à navigationController mais il est toujours présent.

J'ai essayé aussi: -

self.navigationController?.dismiss(animated: true, completion: nil) 

En fait, je suis tir d'une notification dans ma classe DrawerViewController: -

//Submit Request 
    else if itemArray[indexPath.row].contains("SUBMIT REQUEST") == true { 
     tableView.deselectRow(at: indexPath, animated: false) 
     self.dismiss(animated: true, completion: nil) 
     NotificationCenter.default.post(name: Notification.Name(rawValue : AssessNowKyes.submitRequest), object: nil) 
    }. 

Je l'appelle dans mes ViewControllerClass: -

override func viewDidLoad() { 
    super.viewDidLoad() 
    NotificationCenter.default.addObserver(self, selector: #selector(submitRequestClicked), name: Notification.Name(rawValue : AssessNowKyes.submitRequest), object: nil) 
} 

//Submit Request Clicked 
@objc fileprivate func submitRequestClicked() { 
    let controller = SubmitRequestViewController.init(nibName: "SubmitRequestViewController", bundle: nil) 
    self.navigationController?.pushViewController(controller, animated: true) 
} 

Je le fais. Je ne sais pas à propos de je dois supprimer Observer aussi? Parce que j'ai essayé ça aussi. Ça ne fonctionne pas.

+0

pouvez-vous essayer d'exécuter la méthode popviewcontroller sur le thread principal? – Basheer

+0

supprimer let _ =, self.navigationController? .popToRootViewController (animé: true) est ce qui est nécessaire –

+0

U signifie seulement ce self.navigationController? .popViewController (animé: true)? – kishor0011

Répondre

1

vérifier où vous appelez êtes-vous appelez ViewWillapper

Si oui ce ce mal

let controller = SubmitRequestViewController.init(nibName: "SubmitRequestViewController", bundle: nil) 
    self.navigationController?.pushViewController(controller, animated: true) 
+0

Vous voulez dire que je l'écris dans ViewWillAppear? – kishor0011

+0

oui je veux dire cela ou toute fonction qui se déclenche lorsque vous présentez ce rootController –

+0

En fait, ce que je fais c'est que je tire une notification. Je vais fermer mon tiroir et je vais tirer une notification et appeler cela. – kishor0011

1

Je ne peux pas réapparaître cette question.

Je suppose que vous devez tirer action de poussée deux fois.

  • ajouter point d'arrêt sur viewDidLoad sur SubmitRequestViewController pour vérifier si viewDidLoad a été appelé deux fois
  • vérifier si vous le feu sur story-board et la programmation à nouveau
  • supprimer nib et créer à nouveau pour vérifier si cela est un bug de Xcode
+0

Ok, je vais essayer cette fois. Merci – kishor0011