如何重新创建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
是不要做这样的调用正确的地方,但是又是什么?
答
我不知道该将自己的“加载”功能,所有进行的跨你的控制器是实现这一目标的最佳途径。
我宁愿把它放在你的应用程序的初始化,在applicationDidFinishLauching
部分。然后你有一个集中的地方,你恢复以前的状态(更容易处理恕我直言)。
让我们假设你想实现一些更高级的恢复功能,如:
- 显示启动的UIView有一个活动的指标,表明你正在恢复以前的状态
- 用户恢复的堆栈你在导航控制器
- 控制器去除色斑
它更容易有在applicationDidFinishLauching所有这些代码:它”都在一个点上管理。
另外,将旧状态恢复到导航控制器时,可以避免使用转换,并在推动控制器时使用animated:NO
而不是YES
。从您的角度来看,处理起来会更容易,如果您移除实现转换所需的时间,恢复时间可能会缩短。
你们是不是当用户再次运行它来恢复应用程序的状态?看看这个答案是否有帮助:http://stackoverflow.com/questions/2360578/iphone-navigationcontroller-autoloading-to-three-level/2360901#2360901 – DyingCactus 2010-03-08 14:16:50