1

我有四个视图控制器类 A、B、C、D。

当从 A 类和 B 类按下“开始”按钮时,D 类被按下。

我在应用程序委托中有一个方法可以为我做到这一点

-(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 类发生我不想要的变化。

有什么建议么 ?

4

2 回答 2

3

因此,我建议您花一些时间阅读有关代表的苹果文档。他们会在这里做你想要的,两个视图可以有相同的子视图。从那里让子视图调用委托来确定它需要做什么。

要记住的另一件事是,让任何视图推动视图也成为负责弹出该视图的视图是一种很好的做法。

编辑:只是为了帮助您解决原始问题并让您思考正确的道路。当在 D 类中按下后退按钮时。您希望它从那里调用委托(可以是 A 类或 B 类)上的方法,您可以让它转到同一个类。或者,如果你想呈现另一个视图,让委托视图呈现 C 类。使用委托允许你让 A 类呈现 C 类,同时允许 B 类在按下返回时停留在 B 上。我希望这回答了你的问题。

于 2013-01-07T20:00:11.523 回答
2

当你在导航控制器中推送你的 ViewController 时,所有的 ViewController 都被推送到导航控制器中。

从导航控制器堆栈中找出 viewController 并弹出到该选定的视图控制器。

假设你从 A-> B -> C -> D 导航。然后,如果你通常使用 [self.navigationController popViewControllerAnimated:YES] 从 D 类弹出你的视图控制器;

然后它弹出到 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];

}

我希望这会帮助你

于 2013-01-07T20:06:16.407 回答