2

对于我的应用程序,我想拥有同一个视图控制器的几个不同实例。现在,我只是创建一个这样的新实例:

iSafeViewController *tab = [[iSafeViewController alloc] init];

[tab setModalPresentationStyle:UIModalPresentationFullScreen];
[tab setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];

[self presentViewController:tab animated:YES completion:nil];

伟大的。而且由于无论如何这都是在 iSafeViewController 类中完成的,所以我有另一个按钮,当前只是关闭堆栈上的最新控制器。

 - (IBAction)closeTab:(id)sender {
    [self dismissViewControllerAnimated:YES completion:nil];
 }

好的,但是,我真的希望能够回到这些实例。所以,我有两个问题。

  1. 确实dismissViewControllerAnimated从内存中删除该控制器的实例。如果没有,有没有办法我可以重新呈现它。

  2. 那么可能有更好的方法来浏览 viewController 实例presentViewControllerAnimated。至少,有没有更好的方法来创建一个视图控制器的新实例并能够导航到每个实例,希望不在堆栈中。换句话说,如果有三个 viewController 实例,有没有办法从第三个到主要的?

任何想法,将不胜感激。谢谢。

4

1 回答 1

5

“是否dismissViewControllerAnimated从内存中删除了该控制器的实例?如果没有,有没有办法我可以重新呈现它。”

调用dismissViewControllerAnimated不会显式地从内存中删除视图控制器,但如果代码的其他部分没有存储对视图控制器的强引用,一旦呈现的视图控制器关闭您的 VC,它可能会按照正常的内存管理系统被释放。

因此,如果您确保代码中的某些内容引用了您的视图控制器(除了以模态方式呈现它的 VC 之外),它在被解雇后不会消失,是的,这意味着您可以重新使用它。

至于对视图控制器的“随机访问”:您可以使用UINavigationController和使用诸如popToViewController:animated:和多次调用pushViewController:animated:(没有动画!)之类的方法来创建前往任意视图控制器的效果。这感觉有点像 hack。

或者,最好,您可以编写自己的自定义容器视图控制器。这是一个处理呈现其他视图控制器的视图控制器。请参阅Apple 文档

这是一个很好的 WWDC 视频:Implementing UIViewController Containment

进一步阅读:

于 2013-02-04T16:44:51.640 回答