使用Unwind segue返回

时间:2015-07-10 11:41:33

标签: objective-c storyboard segue unwind-segue

我正在使用具有三个viewControllers的导航控制器的故事板,根控制器和另外两个分别标记为1 2和3。如图像enter image description here

所示

现在问题是我想使用单个unWind Segue从第3个回到rootViewController和第2个viewController。我的意思是,如果我从root推出第三个控制器而不是放松让我回到根控制器,如果我从第二个推出它让我回到第二个viewController。我想只用一个按钮就可以了。任何帮助将不胜感激 。感谢

1 个答案:

答案 0 :(得分:1)

您需要指定一个IBAction并将该操作附加到您要按的按钮以向后移动到任何以前的视图控制器。在此操作方法中,您可以指定要放松到哪个控制器。

现在,根据图像,您想要从第三个控制器放松到第二个控制器。因此,在第3个控制器中,将以下操作方法附加到按钮。 此外,转到故事板并为每个视图控制器提供一个故事板标识符。 我们假设,您的第二视图控制器的故事板标识符是“secondViewController”。

-(IBAction)unwindToThisViewController:(UIStoryboardSegue *)unwindSegue
    {

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    SecondViewController *secondVC = [storyboard instantiateViewControllerWithIdentifier:@"secondViewController"];
    int index = [self getMyDesiredViewControllerIndex:secondVC];
    [self.navigationController popToViewController:[[self.navigationController viewControllers]objectAtIndex:index] animated:YES];
    }

您的getMyDesiredViewControllerIndex方法应如下所示 -

-(int)getMyDesiredViewControllerIndex:(UIViewController*)desiredVC{

    int i=0;
    for(UIViewController *vc in [self.navigationController viewControllers]){
        if([vc isKindOfClass:[desiredVC class]]){
            return i;
        }
        i++;
    }
    return 0;
}

这样,您可以跳转到任何所需的视图控制器。只需指定所需的View Controller并从getMyDesiredViewControllerIndex获取其索引并弹出到该控制器。

希望这有帮助!