使用 Unwind segue 返回

Go back using Unwind segue

我正在使用带有三个 viewController 导航控制器的故事板,根控制器和另外两个分别标记为 1 2 和 3。如图

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

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

现在,根据图像,您要从第 3 个控制器展开到第 2 个控制器。因此,在您的第三个控制器中,将以下操作方法附加到按钮。 此外,转到故事板并为每个视图控制器提供一个故事板标识符。 假设您的 Second View Controller 的故事板标识符是 "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;
}

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

希望对您有所帮助!