使用popViewControllerAnimated时调用viewDidLoad

时间:2012-09-20 16:47:45

标签: objective-c ios uinavigationcontroller

我正在使用UINavigationController在类之间导航。当我按下第一个视图上的按钮将我发送到第二个视图时,每个人都可以正常工作。但是当我不想从第二个视图返回到第一个视图时,viewDidLoad方法没有被调用,我真的需要这样做。

根据this post,我应该以某种方式将我的观点设定为nil,但我不确定在何处或如何做到这一点。这是我用来返回第一个视图的代码:

NewSongController *nsContr = [[NewSongController alloc] initWithNibName:@"mNSController" bundle:nil];
[self.navigationController popViewControllerAnimated:YES];
[nsContr release];

3 个答案:

答案 0 :(得分:5)

您的代码不正确。

您不需要实例化您的第一个控制器以便弹出它。它已经存在。

viewDidLoad仅在您第一次加载viewController时运行(即当您按下它时)。当你推到其他控制器时,它们被放到一个堆栈上(想象一堆卡片)。当您将另一张卡片推入堆叠时,它下方的卡片已经存在。

当你弹出它就像从堆栈中取出一张卡片。但是下面的卡已经存在,所以它不需要再次加载。它只是运行viewWillAppear。

你需要做的就是......

[self.navigationController popViewControllerAnimated:YES];

那就是它。

删除有关NewSongController的内容(如果这是您要返回的内容)。

然后在NewSongController函数- (void)viewWillAppear:animated;中放回你想要运行的代码。

希望有所帮助。

答案 1 :(得分:1)

您的第一个视图已加载并被推送到导航堆栈。不要在没有完全理解如何将视图设置为nil将影响行为的情况下弄乱堆栈中的什么。

无论你在viewDidLoad上做什么,在viewWillAppear或viewDidAppear中执行它都会得到你想要的结果。

答案 2 :(得分:0)

viewDidLoad不会出现,因为它已存在于导航堆栈中。由于您要回到堆栈中,因此您需要在viewWillAppear或viewDidAppear中触发代码,该代码在从一个viewcontroller弹出到下面的一个viewcontroller时执行。