我正在尝试关闭一个ViewController并在其位置显示另一个ViewController。
这是我的代码看起来像
[self dismissViewControllerAnimated:NO completion:nil];
//load currentProjectListViewController
currentProjectListViewController = [[CurrentProjectListViewController alloc] initWithNibName:@"CurrentProjectListViewController" bundle:nil];
[self presentViewController:currentProjectListViewController animated:NO completion:nil];
但由于某种原因,视图会快速闪烁,然后保持不变,并且操作与往常一样。
我想知道我的代码是不正确的?或者我的代码中是否有其他地方需要寻找...如果有的话我应该留意什么。
我已经调试了我的应用程序的垃圾,但未能找到问题的根源。
一方面不是偶然但只是很少会加载下一个视图!但我不明白为什么。
答案 0 :(得分:0)
我建议你这样做:
[self dismissViewControllerAnimated:NO completion:^{
currentProjectListViewController = [[CurrentProjectListViewController alloc] initWithNibName:@"CurrentProjectListViewController" bundle:nil];
[self presentViewController:currentProjectListViewController animated:NO completion:nil];
}];
或:
-(void)presentOtherVC {
currentProjectListViewController = [[CurrentProjectListViewController alloc] initWithNibName:@"CurrentProjectListViewController" bundle:nil];
[self presentViewController:currentProjectListViewController animated:NO completion:nil];
}
....
[self dismissViewControllerAnimated:NO completion:^{
[self performSelector:@selector(presentOtherVC)
withObject:nil
afterDelay:0.5f];
}];
的确,当你调用dismissViewController时,它需要一些时间才能生效;在您的代码中,同时(即,在相同的运行循环周期内),您还要求操作系统显示另一个视图控制器。现在,如果您阅读dismissViewControllerAnimated:completion:
描述,则说明(大胆的):
如果连续呈现多个视图控制器,从而构建一堆呈现的视图控制器,则在堆栈中较低的视图控制器上调用此方法将其直接子视图控制器和该子节点上方的所有视图控制器解除堆即可。发生这种情况时,只有最顶层的视图以动画方式被删除;任何中间视图控制器都可以从堆栈中删除。最顶层的视图使用其模态过渡样式被忽略,这可能与堆栈中较低的其他视图控制器使用的样式不同。
因此,您在解除视图控制器同时呈现新视图控制器之间明显存在冲突。这解释了为什么事情不起作用,以及为什么有时它们会起作用。这一切都取决于这些相互冲突的任务之间的时间安排。
如果您使用上面显示的dismissViewControllerAnimated
完成处理程序,则可以解决此问题。