【问题标题】:How to recreate UIViewController stack?如何重新创建 UIViewController 堆栈?
【发布时间】:2010-03-08 14:00:47
【问题描述】:

我正在为我当前的 iPhone 应用程序编写一个“加载”功能。

实际上我想做的就是让用户回到他/她离开的地方。为此,我想重新创建之前出现的所有 UIViewControllers。

我的问题是UIViewControllers 不会出现,如果我只是调用[[self navigationController] pushViewController:newController animated:YES];

当作为事件处理程序调用时,相同的代码可以正常工作,例如在触摸按钮之后。但是如果我在没有偶数的情况下做同样的事情(例如在viewDidLoad 中),新视图控制器的loadView 方法将不会被调用。

我的实际代码(带有一些伪元素):

- (void)viewDidLoad {
    [super viewDidLoad];
    if (loading)
        [self onSomeEvent];
}

- (void)onSomeEvent {
    UIViewController *newController = //init....;
    [[self navigationController] pushViewController:newController animated:YES];
    [newController release];
}

我猜viewDidLoad 不适合打这样的电话,但那又是什么呢?

【问题讨论】:

标签: iphone uiviewcontroller viewdidload loadview


【解决方案1】:

我不确定将您的“负载”功能全部分散到您的控制器中是实现它的最佳方式。

我宁愿把它放在你的应用程序的 init 中,在 applicationDidFinishLauching 部分。然后你有一个集中的地方,你可以恢复以前的状态(更容易处理恕我直言)。

假设您想要实现一些更高级的恢复功能,例如:

  • 显示带有活动指示器的初始 UIView,以指示用户您正在恢复之前的状态
  • 在导航控制器中恢复控制器堆栈
  • 去除飞溅

在 applicationDidFinishLauching 中包含所有这些代码更容易:它们都在一个点进行管理。

此外,在将旧状态恢复到导航控制器时,您可以避免使用转换并在推送控制器时使用 animated:NO 而不是 YES。从您的角度来看,这将更容易处理,如果您消除实现转换所需的时间,则恢复时间可能会减少。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    • 2023-01-12
    • 1970-01-01
    相关资源
    最近更新 更多