所以我有一个由三个UITableViewControllers组成的堆栈,每个都可以正确地在导航栏下面显示其视图,当我通过UI手动切换时。
我怀疑问题是因为在两个推送之间没有让一些重要的UI刷新过程发生,因为它们发生在同一个线程中。看起来好像应该影响顶级控制器的自动视图调整会影响到中间的控制器。
如果是这样,我该怎么办呢?因为我确实希望所有状态恢复都能在应用程序启动时立即进行。
编辑:看起来我的表述不太清楚。restoreNextViewController:是一个MyViewController子类方法,根据存储的键恢复控制器的状态,然后使用[self.navigationController pushViewController:foo animated:NO]推送适当的子控制器。我这样做是因为我的实际应用程序与这个简化情况不同,在堆栈中有多达6个控制器,并且它们并不总是相同的。所以我觉得这比沿着堆栈检查控制器的类更加清晰。每个控制器已经知道如何在用户输入后推送一个子控制器;为什么不在应用程序重新启动时重用它呢?
我没有遇到任何显示控制器的问题;它们只是被奇怪地布局了。
但现在我正在进行应用程序重启后恢复状态的工作,因此我会在主线程中的同一个方法中依次将相同的两个控制器推到根视图控制器之上。然后发生的情况是中间控制器的视图布局过于向下,而顶部控制器的视图则太高(位于导航栏下面)。
相关代码:
for (int i = 0; i < [controllerState count]-1; i++) {
MyViewController* top = (MyViewController*)navigationController.topViewController;
int key = [[controllerState objectAtIndex:i] integerValue];
[top restoreNextViewController:key]; // this calls pushViewController:
// so top will be different in the next iteration
}
我怀疑问题是因为在两个推送之间没有让一些重要的UI刷新过程发生,因为它们发生在同一个线程中。看起来好像应该影响顶级控制器的自动视图调整会影响到中间的控制器。
如果是这样,我该怎么办呢?因为我确实希望所有状态恢复都能在应用程序启动时立即进行。
编辑:看起来我的表述不太清楚。restoreNextViewController:是一个MyViewController子类方法,根据存储的键恢复控制器的状态,然后使用[self.navigationController pushViewController:foo animated:NO]推送适当的子控制器。我这样做是因为我的实际应用程序与这个简化情况不同,在堆栈中有多达6个控制器,并且它们并不总是相同的。所以我觉得这比沿着堆栈检查控制器的类更加清晰。每个控制器已经知道如何在用户输入后推送一个子控制器;为什么不在应用程序重新启动时重用它呢?
我没有遇到任何显示控制器的问题;它们只是被奇怪地布局了。