我有四个视图控制器类A, B, C, d
当从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类&B类取决于哪个类推了D类
- (void)popViewController {
[self.navigationController popViewControllerAnimated:YES];
}
我想实现的是假设如果类A按类D,但当"返回"按钮在类D中按下时,我希望它转到类C而不是类A
我已经尝试实现以下代码
-(void)popToViewController{
[self.navigationcontroller popToViewController:self.ClassCViewController animated:YES]
}
这会导致B类发生我不想要的变化。
有什么建议吗
所以我建议你花点时间阅读苹果关于委托的文档。它们会做你想要的两个视图可以有相同的子视图。从那里让子视图调用委托来弄清楚它需要做什么。
另一件要记住的事情是,让任何推送视图的视图也负责弹出视图,这是一个很好的实践。
编辑:只是为了帮助你解决你最初的问题,让你沿着正确的道路思考。当返回按钮在类d中被按下时,你会想要它在委托上调用一个方法(可以是类a或类B)从那里你可以让它去同一个类。或者如果你想呈现另一个视图让委托视图呈现类C,使用委托允许你让类A呈现类C同时允许类B在按back时停留在B。我希望这能回答你的问题。当你在导航控制器中推送你的ViewController时,那么所有的ViewController都会被推送到导航控制器中。
从导航控制器堆栈中找出视图控制器并弹出到选中的视图控制器
假设你从A-> B -> C -> D导航,然后如果你通常从类D弹出视图控制器使用(自我。实现通过调用popViewControllerAnimated导航控制器:是的),
然后跳到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];
}
我希望这对你有帮助