UINavigationController不断显示弹出视图
因此,在iOS应用程序中,我使用UINavigationController作为根视图控制器。然后我推了几ViewControllers在栈上,让我们称他们为A,B,C和D.UINavigationController不断显示弹出视图
现在,如果我尝试从栈中弹出d,我有时 *遇到以下问题:调用 后popViewControllerAnimated,最上面的视图控制器(D)的视图仍然存在。但是,如果我显示堆叠,它会正确显示,即显示A-B-C并且D不见了。流行的方法似乎只是做它应该的,但是这个观点并没有反映出这一点。
我尝试了各种其他方法,(popToRootViewController,popToViewController),但行为不会改变(即堆栈打印正确,但D的视图仍然存在)。我在所有看起来有意义的视图上都调用了setNeedsDisplay。
弹出D后,我仍然可以推动并删除其他视图控制器。堆栈反映了这些变化,视图没有。此外,D的观点仍然具有响应性,即它不会被冻结,并且应用程序在后台的行为正确。所有视图都非常简单,没有标签视图或类似内容,只是一些标签和按钮。
我已经阅读了许多关于SO和其他地方关于有类似问题的人的帖子,但没有一个解决方案似乎适合在这里。有谁知道为什么会发生这种情况?
* _我一直无法弄清楚在什么情况下。我首先想到这是因为我推D后很快就会弹出D,但它也偶尔会发生在推送和流行之间有更多时间。
这个问题似乎是一个时机。正如我所提到的,(D型)的推动和弹出操作有时确实发生得很快。增加2500毫秒的延迟解决了这个问题。添加500毫秒没有(总是)。由于我不能接受,因此我切换到自定义容器视图控制器,因此没有花费大量时间来确定最小延迟是多少。
正如旁注:从dispatch_async更改为dispatch_sync没有任何影响。延迟似乎是必要的。
感谢大家的帮助。我要关闭这个主题 - 如果有人可以提供更完整的答案,说明为什么事情是这样的,请发布它,然后我将其标记为正确的答案。
你在使用故事板吗?你有没有设置任何的细节,或者你是否在推动代码? – rdelmar 2014-11-24 20:06:45
对不起,应该提到这一点。我用代码完成所有工作,我不使用故事板。我创建了一个UINavigationController子类的实例,并创建了ViewController子类实例,我将其推送到堆栈并全部以代码形式弹出。 – doubleYou 2014-11-25 13:22:02
这听起来像是你正在做的一切正确,所以这将很难弄清楚,特别是如果你不能可靠地重现问题。我从未在任何项目中看到过类似的东西。 – rdelmar 2014-11-25 15:51:32