I have a vc called ViewControllerOne
, when the user taps a UITableViewCell
I call a push segue
and navigate to ViewControllerTwo
. In ViewControllerTwo
I'm hiding the navigation bar, therefore I've created a custom back button:
- (IBAction)backBttn:(id)sender {
[self.navigationController popViewControllerAnimated:YES];
}
that works perfectly, but the viewDidLoad
getting called (in ViewControllerTwo
) every time I navigate back to ViewControllerOne
and than open ViewControllerTwo
again. Am I right that viewDidLoad
getting called because I'm using [self.navigationController popViewControllerAnimated:YES]
? Or it must have another reason?
If I understand you right you are seeing viewDidLoad called on the view controller you are pushing to. (
ViewControllerTwo
). If you push fromViewControllerOne
toViewControllerTwo
,ViewControllerTwo
's viewDidLoad is being called.If you then click the back button to pop
ViewControllerTwo
, return toViewControllerOne
, then push toViewControllerTwo
again, you seeviewDidLoad
being called a second time.This is expected behavior. Push segues (and all other segues except unwind segues) create a new instance of the view controller they are presenting.
Likewise, popping/dismissing deallocates the view controller you are leaving.