如何重新创建UIViewController堆栈?

时间:2010-03-08 14:00:47

标签: iphone uiviewcontroller viewdidload loadview

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

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

我的问题是如果我只是致电UIViewController[[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不适合做这样的电话,但那是什么?

1 个答案:

答案 0 :(得分:0)

我不确定在您的控制器上传播“加载”功能是实现它的最佳方式。

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

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

  • 显示带有活动指示符的启动UIView,以指示用户您正在恢复以前的状态
  • 在导航控制器中恢复控制器堆栈
  • 删除启动

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

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