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



我有四个视图控制器类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];
}

我希望这对你有帮助

相关内容

  • 没有找到相关文章

最新更新