ios - 我如何呈现 'standalone' View Controller ('forgetting' 前一个)

标签 ios objective-c cocoa-touch uiviewcontroller uinavigationcontroller

我有一个常规的 UINavigationController,它附加了几个 View ,它们工作得很好。它的 RootViewController 在左上角有一个自定义菜单按钮,与附加 View 上的“后退”按钮位于同一位置。单击此菜单按钮时,将出现菜单并提供五个选项。 显然,通过单击其中一个选项,您会看到该选项的 ViewController。

我想完全“忘记”当前的 ViewController,并继续使用这个新 Controller 。通常,我会做类似 [self presentViewController....];[self.navigationController push..]; 的操作,但在这些方法中,当前 ViewController 会,我认为,它总是存在于新呈现的 viewController 的“下方”(因为如果使用 [self dismissViewController..];,您将返回到此实例化,我不想要这个)。

在呈现的 ViewController 中,将有一个菜单选项可以返回到原始 Controller ,但我仍然希望这是一个干净的实例化,而不仅仅是弹出。通过提前思考,我认为我可能会使用我知道的这种方法在彼此之上创建无限数量的 ViewController。

我在 ARC 时代开始后进入了 iOS 世界,所以我不知道如何释放或解除分配此类 View ,我认为这与这里相关。

第二个 View Controller 也应该是 UINavigationController 的根,我不确定是否最好使用相同的 UINavigationController,或者我是否应该提供一个新的而忽略旧的。本质上,我想用 rootViewController 替换 Navigation Controller 的 rootViewController,但我不知道这怎么可能。或者可能推送到 ViewController2,然后将 rootViewController 从层次结构中弹出,将新的 ViewController 保留为根,但我假设导航后退按钮有问题(如果可能的话)。

我认为让 ViewController2 成为它自己的 NavigationController 的根并从 ViewController1 呈现这个 NavigationController 一样容易。问题是,在呈现 ViewController2 之后,我想从内存中完全删除与 ViewController1 及其 NavigationController 有关的所有内容,但我不知道该怎么做。

我对我的情况的其他解决方案持开放态度,但我也想知道如何在一般情况下呈现另一个观点后完全“忘记”一个观点。

最佳答案

如果你想“忘记” Controller ,你可以用一个新的替换窗口的 Root View Controller 。如果您没有任何其他指向它的强指针,原始的将被释放。我不确定我是否理解您要尝试做的所有事情,但是例如,如果您希望 Controller 1 和 Controller 2 都成为导航 Controller 的 Root View Controller ,并且您不希望 Controller 1 左右你切换到 2,然后从 Controller 1 做这样的事情:

SecondViewController *second = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:second];
self.view.window.rootViewController = nav;

这将关闭 Controller , Controller 1 及其导航 Controller 将被释放(假设唯一具有指向导航 Controller 的强指针的是窗口,通过其 rootViewController 属性)。

关于ios - 我如何呈现 'standalone' View Controller ('forgetting' 前一个),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20455458/

相关文章:

ios - 谁能推荐解决IOS中 ionic 背景问题的解决方案

objective-c - 如何在不中断动画的情况下更改动画的持续时间?

php - 使用 MKNetworkEngine 将图像 iOS 上传到 PHP - 我知道它有效,但无法让 PHP 捕获

c++ - "symbol(s) not found for architecture x86_64"由于 C 函数而导致的错误

ios - UIColorresolveClassMethod 未从选择器解析

ios - 如何在不导致内存泄漏的情况下清除 CGBitMapContext?

iphone - 关闭 iOS 中的默认旋转动画

iphone - Xcode iOS SDK 兼容性

ios - "Onesignal for Voip push"和 "Firebase Cloud Messaging"不能一起工作

ios - 核心数据 - DENY 规则未删除与已删除的源对象相关的目标对象