您好我正在开发一个应用程序,我在其中使用
呈现新的UIViewController
[self presentViewController:VC animated:NO completion:nil];
在新呈现的视图控制器中,我将使用
移回上一个视图[self presentViewController:oldVC animated:NO completion:nil];
这是我的要求,因为无法保证此视图的显示位置。
但问题是,当我呈现旧视图控制器时,它会转到viewDidLoad
,但不会显示旧视图控制器,它会保留在同一视图控制器上。
任何人都可以告诉我为什么会发生这样的事情吗?
答案 0 :(得分:0)
您不应该通过presentViewController:
返回上一个视图控制器,因为它可能会导致永无止境的循环,如果用户这样做,那么您的应用迟早会崩溃。
但如果需要该动画(即从下到上动画),那么您可以创建自己的dismissViewController方法,该方法将动画您的oldVC从动画调用[self dismissViewControllerAnimated:NO completion:nil]
的底部到上部以及完成块。
答案 1 :(得分:0)
找到我的问题的解决方案!
我没有使用presentViewController:
和dismissViewController:
方法,而是根据segue的标识符创建了segue并要求应用程序按照所需的流程以编程方式执行segue。找到https://stackoverflow.com/a/21241276/1882781
答案 2 :(得分:0)
只是一个指针。 segue方法肯定会起作用。但是,如果您使用此方法呈现view controller
模态,那么之前的view controller
将保留在memory
中,直到您手动dismiss
。
这将导致应用程序使用的严重memory
问题。
一个更好的选择,即使不是最好的选择,也可以获得AppDelegate
单个共享实例的句柄,并将其rootViewController
设置为您的呈现{ {1}}。
例如: -
viewController
这将从内存中释放现有的yourViewControllerClassName *sampleVC = [[yourViewControllerClassName alloc] init];
[self presentViewController:sampleVC animated:YES completion:^{
yourAppDelegateClassName *appdelegate = [UIApplication sharedApplication].delegate;
appdelegate.window.rootViewController = sampleVC;
}];
对象。
PS:确保在所有课程中导入viewController
文件,或者您也可以在 .pch 文件中将其写入。
希望这有帮助! :)