2013-05-09 119 views
2

我創建了一個具有3個ViewController的名稱爲ViewController的應用程序(ViewController,ViewController2,ViewController3) 在ViewController中存在一個按鈕,用於檢查文檔文件夾中的文件或下載它。檢查文件文件夾中是否存在文件轉到ViewController3否則轉到ViewController2並下載它。如何自定義故事板中的後退按鈕

所以ViewController2是用於下載並具有UILable & UIProgress用於顯示下載狀態。如果文件不存在於此頁面下載並轉到ViewController3。

所以ViewController3是用於顯示文件。 (這些頁面連同push segue一樣,像我的圖片在底部)

當我去任何頁面,我點擊返回按鈕返回前頁右? 我什麼時候點擊第一頁上的按鈕,文件不存在,下載到第二頁,然後完成下載,轉到第3頁。現在我想點擊第3頁上的後退按鈕轉到第1頁第2頁!!!!

我在故事板上工作。

enter image description here

回答

3

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

您也可以實現第2步沒有縮小,按ctrl拖動您的視圖下從黃色圓圈綠色退出符號廣場,或者你甚至可以這樣做,所有的左邊的場景框! – micantox 2013-05-09 13:25:50

+0

正確....但它的工作在ios 6 – emma 2013-05-09 13:29:03

+1

對不起,你的意思是? – micantox 2013-05-09 13:33:36