如何创建切换视图

时间:2014-04-12 13:24:38

标签: ios objective-c

我有一个包含以下视图的应用并查看转化。

查看1 - >查看2 - >查看3 - >查看4

在返回时,它可以查看1< - View 2< - View 3< - View 4 或查看1< - View 2< - View 4

基本上在视图4中,您可以转到视图3或查看2。 当应用关闭睡眠或用户离开应用时,它会加载到视图1上。

问题我有,我把每个视图作为自己的视图控制器。并通过以下方法调用。

    TableViewSelect *tableviewselect = [[TableViewSelect alloc] initWithNibName:nil bundle:nil];
    [self presentViewController: tableviewselect animated:YES completion:NULL];

这引发了一个问题,即新视图显示在旧视图的顶部,旧视图和其中的所有内存都未被释放。

我被告知我应该使用uinavigationcontroller而不是视图控制器。它是否正确?那么在理想世界中我应该如何添加视图?我想要的唯一问题是在离开视图时所有内存都被释放(例如nsmutablearray)。

由于

2 个答案:

答案 0 :(得分:1)

如果您确实需要在离开时取消分配先前的控制器,那么您的方法和导航控制器方法都不会实现。一种方法是在需要更改控制器时更改窗口的根视图控制器,

TableViewSelect *tableviewselect = [[TableViewSelect alloc] initWithNibName:nil bundle:nil];
self.view.window.rootViewController = tableviewselect;

除非您的控制器使用大量内存,否则导航控制器方法可能会更好。它为您提供过渡(上述方式没有),以及一个易于向后的导航栏。

答案 1 :(得分:0)

在这种情况下,

UINavigationController将是您的最佳选择。 UINavigationController具有从导航" stack"中推送和弹出视图的方法。 (如果您不熟悉该术语,请查阅与计算机科学相关的堆栈)。根据用户想要通过视图的路径(他们将通过UI进行交互),您可以推送/弹出一定数量的视图,例如弹出两次到"跳过"在视图3。

当您收到应用程序正在关闭的通知时(根据您的实现和目标,这可以通过通知或查看循环方法,如viewWillUnload),您可以调用UINavigationController方法弹出堆栈的所有视图,从而回到你的第一个视图。祝你好运!