您可以通过截获在ViewController3后退按钮事件,并使用unwindSegues实现这一目标。 查看William Jockusch对此question的回复,了解如何拦截后退按钮事件。
要使用开卷塞格斯在这种特殊情况下,那么你需要:
1)在你的ViewController1创建一个方法,如
- (IBAction)unwindToThisViewController:(UIStoryboardSegue *)unwindSegue
{
NSLog(@"Rolled back");
}
2)在你的故事板缩小,然后CTRL-从您的ViewController3拖到ViewController3场景中左侧的“退出”绿色框(以及红色框First Responder和所有控制器视图的子视图)。一个弹出窗口将显示,询问您想要将展开的继续连接到的IBAction,并且您应该能够选择刚刚创建的unwindToThisViewController
操作。这将创造一个放松的过程。
3)从场景中选择此开卷赛格瑞,并给它一个ID,如 “unwindToStart”
4)最后,在ViewController3类,覆盖的方法viewWillDisappear
如下:
-(void) viewWillDisappear:(BOOL)animated
{
if ([self.navigationController.viewControllers indexOfObject:self]==NSNotFound)
[self performSegueWithIdentifier:@"unwindToStart" sender:self];
[super viewWillDisappear:animated];
}
这将拦截后退按钮事件,并展开到您的ViewController1,你很好去。
编辑:因为unwind segues仅支持iOS 6及更高版本,所以如果您需要早期版本的iOS上的此功能,我认为唯一的方法是从ViewController3的viewDidLoad中的NavigationController堆栈中手动删除ViewController2。如下面的代码的东西应该做的事:
- (void)viewDidLoad
{
NSMutableArray *viewControllers = [NSMutableArray arrayWithArray:self.navigationController.viewControllers];
for(UIViewController* vc in self.navigationController.viewControllers)
{
if ([vc isKindOfClass:[ViewController2 class]]) {
[viewControllers removeObject:vc];
break;
}
}
self.navigationController.viewControllers = [NSArray arrayWithArray:viewControllers];
// Do any additional setup after loading the view.
}
您也可以实现第2步没有缩小,按ctrl拖动您的视图下从黄色圆圈绿色退出符号广场,或者你甚至可以这样做,所有的左边的场景框! – micantox 2013-05-09 13:25:50
正确....但它的工作在ios 6 – emma 2013-05-09 13:29:03
对不起,你的意思是? – micantox 2013-05-09 13:33:36