2011-07-31 19 views
0

我在基於標籤欄的應用程序中構建了導航視圖控制器。在控制器中,應用程序會顯示帶有一些註釋的地圖視圖。在導航欄上,有一個欄按鈕「列表」。當用戶按下按鈕時,包含註釋列表的表格視圖將被推入導航堆棧。在表格視圖中,我還實現了一個自定義欄按鈕,如果用戶按下按鈕,地圖視圖將彈出到導航控制器中。UINavigationView問題

問題出在這裏,這個應用程序工作正常,但是如果我按下「List」按鈕,並且一旦tableview控制器加載後,我通過按下「Map」按鈕返回到地圖視圖,然後切換幾次這樣的看法。首先視圖切換正常,但在幾圈之後(經過多次測試,這個數字是3),當我再次按下「List」按鈕時,問題如下所示: tableview似乎被推入堆棧(從後面按鈕顯示在導航欄上),但tableview沒有顯示,它仍然是地圖視圖顯示。如果我現在按下後退按鈕,導航控制器中的根視圖控制器會顯示,但是當我想切換回子視圖控制器(tableview控制器)時,應用程序終止。

對不起,我無法在此問題插入圖像,但可以有問題的截圖這裏: http://i.stack.imgur.com/hNYsX.png

這裏是我視圖控制器之間進行切換的代碼:

在的根視圖控制器導航視圖控制器:

ListViewController *flipListViewController = [[ListViewController alloc]initWithStyle:UITableViewStylePlain]; 
AppDelegate *delegate = [[UIApplication sharedApplication]delegate]; 
UINavigationController *navController = [delegate navigationController]; 
//Flip Animation 
[UIView beginAnimations:nil context:nil]; 
[navController pushViewController:ListViewController animated:NO]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
[UIView setAnimationDuration:0.7]; 
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:navController.view cache:NO]; 
[UIView commitAnimations]; 
[navController release]; 
[flipListViewController release]; 

這裏我自定義過渡動畫。在子視圖(表視圖控制器)中,我使用以下代碼來彈出根視圖控制器。

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:0.7]; 
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.navigationController.view cache:NO]; 
[self.navigationController popViewControllerAnimated:NO]; 
[UIView commitAnimations]; 

回答

0

看來你使用的應用程序委託的導航控制器,而你應該使用self.navigationController推和彈。也不需要使用動畫塊,你可以使用modalTransitionStyle來實現翻轉效果。嘗試使用self.navigationController推送viewController。

+0

謝謝!這解決了我的問題。但是,你能解釋爲什麼應該使用self.navigationController而不是app Delegate的導航控制器?我使用應用程序委託的控制器,因爲我看到一些使用此方法的示例。 – Jing

+0

因爲您爲每個選項卡的視圖控制器都有一個導航控制器,所以它們也不同,應用程序委派導航控制器不適合您的情況,因爲默認情況下您將tabBarController的視圖添加到窗口。所以你需要使用self.navigationController。總是記得每個視圖控制器有一個導航控制器,如果它的根控制器有一個導航控制器 –