【问题标题】:Go back using Unwind segue使用 Unwind segue 返回
【发布时间】:2015-09-29 03:36:26
【问题描述】:
我正在使用带有三个视图控制器的导航控制器的故事板,根控制器和另外两个分别标记为 1 2 和 3。如图所示
现在的问题是我想使用单个 unWind Segue 从第三个视图控制器返回到 rootViewController 和第二个视图控制器。我的意思是,如果我从 root 推动第三个控制器而不是展开让我回到根控制器,如果我从第二个推动而不是它让我回到第二个 viewController。我想只使用一个按钮返回。任何帮助将不胜感激 。谢谢
【问题讨论】:
标签:
objective-c
storyboard
segue
unwind-segue
【解决方案1】:
您需要指定一个 IBAction 并将该操作附加到您要按下的按钮以向后移动到任何先前的视图控制器。在此操作方法中,您可以指定要展开到哪个控制器。
现在,根据图像,您想从第 3 个控制器放松到第 2 个控制器。因此,在您的第三个控制器中,将以下操作方法附加到按钮。
此外,转到情节提要并为每个视图控制器提供情节提要标识符。
假设,您的第二个视图控制器的故事板标识符是“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 获取其索引并弹出到该控制器。
希望这会有所帮助!