iphone - 当我在没有动画的情况下插入多个 Controller 时,布局出现问题

标签 iphone cocoa-touch

所以我有一个由三个 UITableViewController 组成的堆栈,当我手动点击 UI 时,每个 Controller 都会在导航栏下方正确显示其 View 。

但是,现在我正在努力在应用程序重新启动时恢复状态,因此我将相同的两个 Controller 推送到 Root View Controller 顶部,一次一个,在主线程中使用相同的方法。最终发生的情况是中间 Controller 的 View 布置得太靠下,而顶部 Controller 的 View 布置得太靠上(导航栏下方)。

相关代码:

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 刷新过程,因为它们发生在同一个线程中。它几乎看起来好像应该影响顶部 Controller 的自动 View 调整会影响中间的 Controller 。

是吗?如果是这样,我应该做什么,因为我确实希望所有状态恢复在应用程序启动时立即进行?

编辑:看起来我不清楚。 restoreNextViewController:是 MyViewController 子类方法,它根据存储的键恢复 Controller 的状态,然后使用 [self.navigationController pushViewController:foo animated:NO] 推送适当的子 Controller 。 。我这样做是因为我的实际应用程序与这个简化的情况不同,堆栈中最多有 6 个 Controller ,而且它们并不总是相同的。所以我认为这将是一个比向下检查 Controller 类更干净的设计。每个 Controller 已经知道如何推送子 Controller 来响应用户输入;为什么不在应用程序重新启动时重用它?

我在让 Controller 显示时没有遇到任何问题;它们只是排列得很奇怪。

最佳答案

您是否考虑过让每个 View Controller 在 viewWillAppear: 期间推送其 subview ?我只需在您的 appDelegate 中设置一个 isRestoringState 属性,并在 viewWillAppear: 期间检查是否已设置,如果已设置,则运行该 View 的恢复,包括推送任何可见的 subview 。像这样的东西:

- (void)viewWillAppear:(BOOL)animated {
    if ([[UIApplication sharedApplication] isRestoringState]) {
        // restore local state, set myChildController if a child is visible
        if (myChildController) {
            [self.navigationController pushViewController:myChildController animated:NO];
        }
    }
}

关于iphone - 当我在没有动画的情况下插入多个 Controller 时,布局出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/913171/

相关文章:

iphone - 我的开发人员没有使用 Interface Builder,这是一件坏事吗?

cocoa-touch - RestKit 和 CocoaLumberjack 作为框架集成在 Xcode7 中

iphone - UITextField 内阴影

ios - XCODE 6.2 不合格设备 IOS 8.3

ios - 在上传到服务器之前压缩视频和图像

iphone - 适用于 iOS 的可视化分析工具?

ios - 在导航栏上添加自定义后退按钮

带有半径的 Objective-c 搜索位置

ios - 检查时间是否介于两次iOS之间

iphone - iOS:如何在整个生命周期内保存数据?