2015-12-03 42 views
0

我試圖用prepareForSegue方法在同一時間推控制器的某些電話號碼,但得到這個錯誤:執行SEGUE和推2個viewcontrollers

嵌套推動畫可以導致損壞的導航欄 和 完成意外狀態下的導航轉換。導航欄子視圖樹可能會損壞。

這裏的代碼:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {  
    if ([[segue identifier] isEqualToString:@"rawSegue"]){ 
     MyController * aController = [segue destinationViewController]; 
     [aController setText:theText]; 
     [aController setType:Type]; 
     [aController setCountry:country]; 
    } 
} 

的prepareForSegue方法被稱爲對包含在一個NSMutableArray每個對象。我怎麼能調用多個視圖控制器沒有得到這個錯誤? Segue在故事板中連接了正確的標識符。

+1

你能否粘貼你用來推送視圖控制器的確切代碼 – Burhan

+0

問題不明確,你想用segue同時推兩個控制器嗎?同時顯示多個ViewController或打開控制器排隊? – Atika

+0

警告說明了這一切。如果在結束一個轉換之前推送多個視圖控制器,可能會導致導航欄損壞。也就是說,如果按下後退按鈕,它可能會彈出頂視圖控制器,並且您可能無法彈出其他視圖控制器,或者您可以彈出一個視圖控制器,並且可能有後退按鈕,因此無法起作用等。 – Johnykutty

回答

0

如果要將多個UIViewControllers推入導航控制器,則應添加除最後一個以外的所有動畫。例如

/** 
A method to push multiple UIViewControllers into UINavigationController. 
You can push multiple controller, but the trick is you push them without animation, 
only last is pushed with animation. 
@param arrayControllers An array of UIViewController to be pushed at once in Navigation Controller 
*/ 
-(void)pushMultipleViewControllers:(NSMutableArray<UIViewController *> *)arrayControllers 
{ 
    int index = 0; 
    for (UIViewController *controller in arrayControllers) { 
     BOOL isAnimated = NO; 
     if(index==arrayControllers.count-1){ 
      //Only last view controller should be inserted with animation 
      isAnimated=YES; 
     } 
     [self.navigationController pushViewController:controller animated:isAnimated]; 
     index++; 
    } 
} 
+0

那麼,我應該寫這個方法?最後但並非最不重要的是:viewController的數量是動態的,因爲它們來自一個NSMutableArray ... – yorh

+0

我更新了代碼,以便您可以將NSMutableArray傳遞到單個方法中。當你想推控制器而不是繼續時,你應該手動調用這個方法。例如,在按鈕單擊或cellSelectedAtIndex等上調用此方法。 –

+0

可以在prepareFor Segue方法中執行相同的操作嗎? – yorh

0

有做上面的回答更簡潔的方式:

- (void)pushMultipleViewControllers:(NSMutableArray<UIViewController *> *)arrayControllers { 

    NSMutableArray *navigationControllerStack = self.navigationController.viewControllers.mutableCopy; 

    [navigationControllerStack addObjectsFromArray:arrayControllers]; 

    [self.navigationController setViewControllers:navigationControllerStack animated:YES]; 

} 

注意,這仍然沒有解決如何用SEGUE做到這一點,但同樣沒有上述問題的答案。