【发布时间】:2014-11-24 19:16:37
【问题描述】:
所以在 iOS 应用程序中,我使用 UINavigationController 作为根视图控制器。然后我将几个 ViewController 压入堆栈,我们称它们为 A、B、C 和 D。
现在,如果我尝试从堆栈中弹出 D,我 有时 * 会遇到以下问题: 调用 popViewControllerAnimated 后,最顶层视图控制器 (D) 的视图仍然存在。但是,如果我显示堆栈,它会正确显示,即显示 A-B-C 而 D 消失了。 pop 方法似乎做了它应该做的事情,但视图并没有反映这一点。
我尝试了各种其他方法,(popToRootViewController,popToViewController),但行为没有改变(即堆栈打印正确,但 D 的视图仍然存在)。我已经在所有看起来有意义的视图上调用了 setNeedsDisplay。
弹出 D 后,我仍然可以推送和移除其他视图控制器。堆栈反映了这些变化,视图没有。此外,D 的视图保持响应,即它没有被冻结,并且应用程序在后台运行正常。所有视图都非常简单,没有标签视图之类的,只有几个标签和按钮。
我在 SO 和其他地方阅读了许多关于人们遇到类似问题的帖子,但似乎没有一个解决方案适合这里。有谁知道为什么会发生这种情况?
*_ 我无法弄清楚究竟是在哪种情况下。我一开始以为是因为我推后很快就弹出了D,但是当推和弹出之间有更多时间时,偶尔也会发生这种情况。
【问题讨论】:
-
您在使用情节提要吗?您是否设置了任何 segues,或者您是否正在推送和弹出代码?
-
对不起,应该提到这一点。我在代码中做这一切,我不使用故事板。我创建了一个 UINavigationController 子类的实例,并创建了 ViewController 子类实例,我将它们推送到堆栈并弹出它们,所有这些都在代码中。
-
听起来你做的一切都是正确的,所以这很难弄清楚,特别是如果你不能可靠地重现问题。我从来没有在我的任何项目中看到过这样的事情。
标签: ios objective-c iphone uinavigationcontroller