我有一个名为ViewControllerOne
的vc,当用户点按UITableViewCell
时,我拨打push segue
并导航到ViewControllerTwo
。在ViewControllerTwo
我隐藏了导航栏,因此我创建了一个自定义后退按钮:
- (IBAction)backBttn:(id)sender {
[self.navigationController popViewControllerAnimated:YES];
}
效果很好,但每当我导航回viewDidLoad
而不是再次打开ViewControllerTwo
时,ViewControllerOne
就会被调用(ViewControllerTwo
}。我是否正确viewDidLoad
被调用因为我正在使用[self.navigationController popViewControllerAnimated:YES]
?或者它必须有另一个原因?
答案 0 :(得分:1)
如果我理解你,你会看到你正在推动的视图控制器上调用viewDidLoad。 (ViewControllerTwo
)。如果您从ViewControllerOne
推送到ViewControllerTwo
,则会调用ViewControllerTwo
的viewDidLoad。
如果您再单击后退按钮以弹出ViewControllerTwo
,请返回ViewControllerOne
,然后再次按ViewControllerTwo
,您会看到第二次调用viewDidLoad
。< / p>
这是预期的行为。推送segues(以及除展开segues之外的所有其他segues)创建他们正在呈现的视图控制器的新实例。
同样,弹出/关闭会释放您要离开的视图控制器。
答案 1 :(得分:1)
当您从导航堆栈弹出视图控制器时,它管理的视图将被取消分配(或卸载)。因此,再次打开ViewControllerTwo
时,必须再次加载视图。这就是为什么在您的情况下多次调用viewDidLoad
的原因。