您可以通過截獲在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