如何弹出到不同的视图控制器

时间:2013-01-07 19:53:59

标签: iphone ios view pushviewcontroller popviewcontroller

我有四个视图控制器类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类变化。

任何建议?

2 个答案:

答案 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];

}

我希望这会对你有所帮助