我有一个常规的 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/