Iphone XCode:insertSubview、removeFromSuperview、viewDidLoad。。。把这一切都集中起来
我觉得我在这里遗漏了一些基本的东西,如果你能帮我把这些都整理好,我将不胜感激 假设我有两个视图控制器。。。ViewA控制器和ViewB控制器 如果我想展示viewA,我会这样做:Iphone XCode:insertSubview、removeFromSuperview、viewDidLoad。。。把这一切都集中起来,iphone,objective-c,xcode,Iphone,Objective C,Xcode,我觉得我在这里遗漏了一些基本的东西,如果你能帮我把这些都整理好,我将不胜感激 假设我有两个视图控制器。。。ViewA控制器和ViewB控制器 如果我想展示viewA,我会这样做: ViewAController *new_view = [[ViewAController alloc] initWithNibName:@"ViewAController" bundle:nil]; self.viewAController = new_view; [self.view insertSubView:n
ViewAController *new_view = [[ViewAController alloc] initWithNibName:@"ViewAController" bundle:nil];
self.viewAController = new_view;
[self.view insertSubView:new_view.view atIndex:0];
[new_view release];
[self.viewAController.view removeFromSuperview];
ViewBController *new_view = [[ViewBController alloc] initWithNibName:@"ViewBController" bundle:nil];
self.viewBController = new_view;
[self.view insertSubView:new_view.view atIndex:0];
[new_view release];
如果在显示viewA后,我想显示viewB控制器,我会这样做:
ViewAController *new_view = [[ViewAController alloc] initWithNibName:@"ViewAController" bundle:nil];
self.viewAController = new_view;
[self.view insertSubView:new_view.view atIndex:0];
[new_view release];
[self.viewAController.view removeFromSuperview];
ViewBController *new_view = [[ViewBController alloc] initWithNibName:@"ViewBController" bundle:nil];
self.viewBController = new_view;
[self.view insertSubView:new_view.view atIndex:0];
[new_view release];
这是我的问题
当我第一次加载viewA时,viewA的“viewDidLoad”函数将启动。。。显然这是第一次加载。但是,当我从superview中删除viewA时,请在viewB中加载,然后在稍后再次加载viewA,如下所示:
[self.viewBController.view removeFromSuperview];
if ( self.viewAController == nil ) {
ViewAController *new_view = [[ViewAController alloc] initWithNibName:@"ViewAController" bundle:nil];
self.viewAController = new_view;
[self.view insertSubview:new_view.view atIndex:0];
[new_view release];
} else {
[self.view insertSubview:self.viewAController.view atIndex:0];
}
viewA的“viewDidLoad”功能不会触发。这就好像viewA已经从视图中删除,但它的状态有点保存在内存中。当我再次加载viewA时,它只是从它停止的地方开始恢复。我真正需要它做的是加载,就像它是第一次加载一样,使用“viewDidLoad”,等等
我希望我已经正确地解释了这一点。如果有人能提供一些启示,我将不胜感激。如果你不将
self.viewAController
设置为零,它就不会消失。您可能(希望)将其保留在您的self.viewAController
属性中
您可以在加载视图B后释放它(如果您在其他地方不需要它)
如果调试If/else代码,您可能会发现“If”块从未被访问过。起初我也有同样的想法。我试过:self.viewAController=nil;但应用程序崩溃了。我最终发现您需要这样做:self.viewAController.view=nil;