2

我正在使用 aUINavigationController在类之间导航。当我在第一个视图上按下按钮将我发送到第二个视图时,一切正常。但是当我不想从第二个视图返回到第一个视图时,该viewDidLoad方法不会被调用,我真的需要这样做。

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

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

3 回答 3

5

您的代码不正确。

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

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

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

您需要做的就是弹回...

[self.navigationController popViewControllerAnimated:YES];

而已。

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

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

希望有帮助。

于 2012-09-20T16:56:07.103 回答
1

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

无论您在 viewDidLoad 上做什么,在 viewWillAppear 或 viewDidAppear 中执行都会给您想要的结果。

于 2012-09-20T16:51:03.410 回答
0

viewDidLoad 不会出现,因为它已经存在于导航堆栈中。由于您要返回堆栈,因此您希望在 viewWillAppear 或 viewDidAppear 中拥有要触发的代码,该代码在从一个视图控制器弹出到其下方的视图控制器时执行。

于 2012-09-20T16:51:55.063 回答