UINavigationcontroller 中未使用的视图会发生啥?

Posted

技术标签:

【中文标题】UINavigationcontroller 中未使用的视图会发生啥?【英文标题】:What happens to unused views in UINavigation controller?UINavigationcontroller 中未使用的视图会发生什么? 【发布时间】:2011-01-28 05:13:57 【问题描述】:

我正在 ios 中实现购物车。

我正在使用 UINavigationController 来为流程的每个步骤显示 UIViewController。用户可以使用后退按钮进行更改。

但在他们提交订单后,我不希望他们返回。使用导航控制器显示没有后退按钮的视图的正确方法是什么?

当你这样做时,之前的 UIViewController 会发生什么?他们被释放了吗?显然我不需要它们。我必须手动解除分配吗?

【问题讨论】:

【参考方案1】:

您必须解除分配这些视图控制器。否则,它们将开始泄漏。我想,你会以某种方式推动视图控制器,类似于以下内容。

MyViewController *myViewController = [[MyViewController alloc] init];
[self.navigationController pushViewController:myViewController animated:YES];
[myViewController release];

如果你这样做了,以后你就不用担心那些视图控制器了。 UINavigationController 完成后会释放它们。

隐藏后退按钮:在最后一个视图控制器的loadView 方法中添加以下行。

[self.navigationItem setHidesBackButton:YES];

【讨论】:

是的,我正在以这种方式推送视图如何在没有后退按钮的情况下加载最后一个视图? loadView方法中你的最后一个视图控制器,设置[self.navigationItem setHidesBackButton:YES] @Simon - 一点。 iOS 没有垃圾收集。当您将视图传递给所述 UINavigationController 时,UINavigationController 会保留该视图。这是引用计数,而不是垃圾收集。否则,很好的答案。 @Moshe:是的..你对垃圾收集的看法是正确的..我错了..谢谢伙计..【参考方案2】:

您可以通过以下方式告诉它转到特定的视图控制器:

[myNavController popToRootViewControllerAnimated:YES];

或者,还有一个 UINavigationController 方法给它一个视图控制器数组,它应该呈现第一个。

【讨论】:

以上是关于UINavigationcontroller 中未使用的视图会发生啥?的主要内容,如果未能解决你的问题,请参考以下文章

在 UINavigationController 中未检测到 touchesBegan 和其他触摸事件

关闭 UINavigationController 并呈现另一个 UINavigationController

iOS:如何在现有 UINavigationController 中打开另一个 UINavigationController?

带有主 UINavigationController 和详细 UINavigationController 的 UISplitViewcontroller

带有 UINavigationController 的 UITabBarController,在 hidesBottomBarWhenPushed 上隐藏 UINavigationController

在 UINavigationController 内的 UITabBarcontroller 中添加 UINavigationController?