每次调用popViewControllerAnimated后调用viewDidLoad:

时间:2015-06-23 19:54:42

标签: ios objective-c uinavigationcontroller viewdidload

我有一个名为ViewControllerOne的vc,当用户点按UITableViewCell时,我拨打push segue并导航到ViewControllerTwo。在ViewControllerTwo我隐藏了导航栏,因此我创建了一个自定义后退按钮:

- (IBAction)backBttn:(id)sender {

    [self.navigationController popViewControllerAnimated:YES];

}

效果很好,但每当我导航回viewDidLoad而不是再次打开ViewControllerTwo时,ViewControllerOne就会被调用(ViewControllerTwo}。我是否正确viewDidLoad被调用因为我正在使用[self.navigationController popViewControllerAnimated:YES]?或者它必须有另一个原因?

2 个答案:

答案 0 :(得分:1)

如果我理解你,你会看到你正在推动的视图控制器上调用viewDidLoad。 (ViewControllerTwo)。如果您从ViewControllerOne推送到ViewControllerTwo,则会调用ViewControllerTwo的viewDidLoad。

如果您再单击后退按钮以弹出ViewControllerTwo,请返回ViewControllerOne,然后再次按ViewControllerTwo,您会看到第二次调用viewDidLoad。< / p>

这是预期的行为。推送segues(以及除展开segues之外的所有其他segues)创建他们正在呈现的视图控制器的新实例。

同样,弹出/关闭会释放您要离开的视图控制器。

答案 1 :(得分:1)

当您从导航堆栈弹出视图控制器时,它管理的视图将被取消分配(或卸载)。因此,再次打开ViewControllerTwo时,必须再次加载视图。这就是为什么在您的情况下多次调用viewDidLoad的原因。