我有四个视图控制器类A,B,C,D。
当从A级和A级按下“go”按钮时,按下D级。 B.
我在app委托中有一个方法,它为我做了
-(void)showViewController {
self.ViewController = [[[ViewController alloc] initWithNibName:@"View" bundle:nil] autorelease];
[self.navigationController pushViewController:self.ViewController animated:YES];
}
当从D级按下“后退”按钮时,它会弹回A类和A类。 B类取决于推动D类的哪个类
- (void)popViewController {
[self.navigationController popViewControllerAnimated:YES];
}
我想要实现的是假设A类推动D类但在D类中按下“后退”按钮时我希望它转到C类而不是A类
我试图实现以下代码
-(void)popToViewController{
[self.navigationcontroller popToViewController:self.ClassCViewController animated:YES]
}
这导致我不想要的B类变化。
任何建议?
答案 0 :(得分:3)
所以我建议你花点时间阅读关于delegates的苹果文档。他们将完全按照您的意愿执行,其中两个视图可以具有相同的子视图。从那里有子视图调用委托,以弄清楚它需要做什么。
要记住的另一件事是,优秀的做法是让任何视图推动视图也是负责弹出该视图的视图。
编辑:只是为了帮助您解决原始问题并让您思考正确的道路。当在D类中按下后退按钮时。你可能希望它从那里调用委托上的方法(可以是A类或B类),你可以将它转到同一个类。或者,如果要呈现另一个视图,则委托视图显示为C类。使用委托允许您将A类呈现为C类,同时允许B类在按下后退时保持在B处。我希望这能回答你的问题。答案 1 :(得分:2)
当你在导航控制器中推送你的ViewController时,所有的ViewControllers都被推入导航控制器。
从导航控制器堆栈中找出viewController并弹出到所选的视图控制器。
假设您从A->导航; B - > C - > D.然后,如果你通常使用D类弹出你的视图控制器 [self.navigationController popViewControllerAnimated:YES];
然后它弹出到C类。但是如果你想要弹出B类或A类,请使用:
-(void)popToSelectedViewController
{
//get all view Controller from Stack of navigation controller
NSArray *viewControllers=[self.navigationController viewControllers];
//Declare an Object your selected class
B *homeVC=nil;
//Find out you selected class where u want to pop
for (int i=0; i<[viewControllers count]; i++)
{
UIViewController *tempVC=[viewControllers objectAtIndex:i];
if([tempVC isKindOfClass:[B class]])
{
homeVC=[viewControllers objectAtIndex:i];
break;
}
}
//pop to that selected class if found in stack otherwise popTo RootView
if(homeVC)
[self.navigationController popToViewController:homeVC animated:YES];
else
[self.navigationController popToRootViewControllerAnimated:YES];
}
我希望这会对你有所帮助