2012-01-18 90 views
5

我需要一些關於導航控制器問題的幫助。我有一個navigationController與4 ViewControllers推。我推的最後一個vc以模態方式呈現另一個ViewController。模態ViewController呈現ActionSheet。根據用戶的回答,我要麼僅僅關閉模式ViewController,要麼我想回到根目錄ViewControllerpopToRootViewControllerAnimated不顯示根視圖控制器

中提出的ViewController模態,我有:

- (void) dismissGameReport 
{  
    [[self delegate] GameReportModalWillBeDismissed:modalToPopToRoot];  
} 

在過去ViewController壓入堆棧navigationController我:

- (void)GameReportModalWillBeDismissed: (BOOL)popToRoot; 
{  
    if (popToRoot) 
     { 
     [self.navigationController popToRootViewControllerAnimated:NO]; 
     } 
    else 
     { 
     [self dismissModalViewControllerAnimated:YES]; 
     }    
} 

解僱模態視圖控制器正常工作。 然而,

[self.navigationController popToRootViewControllerAnimated:NO]; 

不會引起根0​​以顯示其意見。添加一些日誌信息我看到消息到self.navigationController後,堆棧被正確彈出,但執行順序繼續。屏幕仍然顯示模態ViewController的視圖。

作爲解決方法,我總是試圖解散模態視圖控制器,並在ViewWillAppear方法中有popToRootAnimated消息。沒有不同。仍然彈出一堆控制器,但屏幕繼續顯示我的模態視圖控制器的視圖,並繼續執行。

有人可以幫我嗎?

+0

你有沒有嘗試用斷點調試你的編譯器進入循環? – Hiren 2012-01-19 13:03:41

回答

6

我喜歡這些欺騙性的問題。這似乎很簡單,直到你嘗試去做。

我發現基本上你需要關閉那個模態視圖控制器,但是如果你嘗試從下一行的導航控制器彈出,事情會變得混亂起來。在嘗試彈出之前,您必須確保解散完成。在iOS 5中,您可以像這樣使用dismissViewControllerAnimated:completion:

-(void)GameReportModalWillBeDismissed:(BOOL)popToRoot{  
    if (popToRoot){ 
     [self dismissViewControllerAnimated:YES completion:^{ 
      [self.navigationController popToRootViewControllerAnimated:YES]; 
     }]; 
    } 
    else{ 
     [self dismissModalViewControllerAnimated:YES]; 
    }    
} 

但我看到你的問題標籤有4.0。我找到的<iOS 5的解決方案不太漂亮,但應該仍然可以工作,而且聽起來你已經在路上了。你想viewDidAppear:不是viewWillAppear:。在這裏,我的解決方案包括伊娃,讓說:

BOOL shouldPopToRootOnAppear; 

然後你GameReportModalWillBeDismissed:會是這個樣子:

-(void)GameReportModalWillBeDismissed:(BOOL)popToRoot{  
    shouldPopToRootOnAppear = popToRoot; 
    [self dismissModalViewControllerAnimated:YES];   
} 

和你viewDidAppear:應該是這樣的......

-(void)viewDidAppear:(BOOL)animated{ 
    [super viewDidAppear:animated]; 
    if (shouldPopToRootOnAppear){ 
     [self.navigationController popToRootViewControllerAnimated:YES]; 
     return; 
    } 
    // Normal viewDidAppear: stuff here 
} 
+0

你好。太好了!它像一個魅力。非常感謝,這是超過4天我正在擺弄我的代碼。再次感謝。 – DanL 2012-01-19 20:02:50

+0

歡迎來到stackoverflow.com。樂意效勞。如果這個答案解決了你的問題,你應該接受它。 – NJones 2012-01-19 21:23:25

相關問題