如何重新创建UIViewController堆栈?

问题描述:

我正在为我当前的iPhone应用程序编写“加载”功能。如何重新创建UIViewController堆栈?

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

我的问题是,如果我只需拨打[[self navigationController] pushViewController:newController animated:YES];UIViewController旨意不会出现。当作为一个事件处理函数中调用,像触摸按钮后

相同的代码工作正常。但是,如果我在没有偶数的情况下执行同样的操作(例如在viewDidLoad中),则新视图控制器的loadView方法将不会被调用。

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

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

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

我猜viewDidLoad是不要做这样的调用正确的地方,但是又是什么?

+0

你们是不是当用户再次运行它来恢复应用程序的状态?看看这个答案是否有帮助:http://*.com/questions/2360578/iphone-navigationcontroller-autoloading-to-three-level/2360901#2360901 – DyingCactus 2010-03-08 14:16:50

我不知道该将自己的“加载”功能,所有进行的跨你的控制器是实现这一目标的最佳途径。

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

让我们假设你想实现一些更高级的恢复功能,如:

  • 显示启动的UIView有一个活动的指标,表明你正在恢复以前的状态
  • 用户恢复的堆栈你在导航控制器
  • 控制器去除色斑

它更容易有在applicationDidFinishLauching所有这些代码:它”都在一个点上管理。

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