如何解决iphone模态视图-如何返回父级parent父级控制器
|| 我有几种视图,以模态形式一个接一个地打开。 View1调用View2,View2调用View3。 我使用以下代码调用下一个视图: View2 *myView = [[View2 alloc] initWithNibName:@\"View2\" bundle:[NSBundle mainBundle]];
[self presentModalViewController:myView animated:YES];
[myView release];
如果用户按下“取消”,则它将返回一个视图…3到2和2到1
[self.parentViewController dismissModalViewControllerAnimated:YES];
我需要做的是,当用户使用View3时,如果他们没有选择“取消”而是完成了操作,那么我需要返回View1并释放View2和View3。
我怎么做?
编辑:主窗口有一个Navcontroller和6个视图控制器。我这样称呼View 1:
View1 *screen = [[View1 alloc] initWithNibName:@\"View1\" bundle:[NSBundle mainBundle]];
self.Search = screen;
[mainNavController presentModalViewController:screen animated:YES];
[screen release];
编辑#2:
主Windows调用“视图1”。主窗口在XIB中具有一个NavController,可正常工作:
View1 *screen = [[View1 alloc] initWithNibName:@\"View1\" bundle:[NSBundle mainBundle]];
[mainNavController presentModalViewController:screen animated:YES];
[screen release];
然后在XIB的View 1上,我添加了一个NavController并将其绑定到.h中的View1NavController
视图1然后调用视图2:
View2 *myView = [[[View2 alloc] initWithNibName:@\"View2\" bundle:nil] autorelease];
UINavigationController * navController = [[[UINavigationController alloc] initWithRootViewController:myView] autorelease];
[View1NavController presentModalViewController:navController animated:YES];
当我执行此操作时,没有错误,但是没有显示View2。
解决方法
为什么不使用
UINavigationController
?您可以同时使用popToRootViewControllerAnimated:
和popViewControllerAnimated:
。
这样的话
[self.parentViewController.parentViewController dismissModalViewControllerAnimated:YES];
您应该回到1
。
摘自dismissModalViewControllerAnimated
,
如果您连续显示多个模态视图控制器,从而构建了一个模态视图控制器堆栈,则在堆栈中较低的视图控制器上调用此方法将取消其直接子视图控制器以及该堆栈上该子视图之上的所有视图控制器。发生这种情况时,只有最顶层的视图会以动画方式关闭;只需将所有中间视图控制器从堆栈中删除即可。最顶层的视图使用其模式过渡样式来消除,该样式过渡样式可能与堆栈中较低的其他视图控制器使用的样式不同。
使用导航控制器
为了使导航控制器正常工作,您可以这样做,而不是将ѭ11装载到何处,
View1 *myView = [[[View1 alloc] initWithNibName:@\"View1\" bundle:nil] autorelease];
UINavigationController * navController = [[[UINavigationController alloc] initWithRootViewController:myView] autorelease]
[mainNavController presentModalViewController:navController animated:YES];
假设view1
是rootViewController
设置好导航控制器后,您可以像这样加载view2
,
View2 *myView = [[View2 alloc] initWithNibName:@\"View2\" bundle:[NSBundle mainBundle]];
[self.navigationController pushViewController:myView animated:YES];
[myView release];
在这种情况下
取消
[self.navigationController popViewControllerAnimated:YES];
完成
[self.navigationController popToRootViewControllerAnimated:YES];
, 似乎没有聪明的方法,请尝试以下愚蠢的方法:
UIViewController *vc = self;
while(vc.parentViewController.modalViewController == vc){
[[vc retain] autorelease];
[vc dismissModalViewControllerAnimated:NO];
vc = vc.parentViewController;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。