2011-07-23 57 views
0

當我的iPhone應用程序工作時,在我的代碼中有一個奇怪的錯誤。我正在創建一個導航控制器並將其放在我的標籤欄控制器中,然後當我從初始屏幕移動到第二屏幕時,第二屏幕上的後退按鈕指向自身。所以當按下後面它只是重新加載自己,然後下一次按下它回到第一個屏幕。uinavigationcontroller後退按鈕重新加載當前加載的屏幕

UINavigationController *nav1 = [[UINavigationController alloc] init]; 

// create the initial views for each nav controller 
SearchViewController *searchView = [[SearchViewController alloc] init]; 
searchView.title = @"Search"; 


//place all the viewcontrollers on the nav controllers ready to view 
[nav1 pushViewController: searchView animated:NO]; 


//create tab bar out of above nav controllers 

UITabBarItem *item = [[UITabBarItem alloc] initWithTitle:@"Search" image:[UIImage imageNamed:@"search.png"] tag:0]; 
nav1.tabBarItem = item; 

UITabBarController *tbc = [[UITabBarController alloc] init]; 
     tbc.viewControllers = [NSArray arrayWithObjects:nav1, nil]; 
    //  
[nav1 release]; 

上面的代碼是在對的appdelegate NAV +標籤控制器

SecondScreenViewController *sVC = [[SecondScreenViewController alloc] init]; 

sVC.title = @"Screen 2"; 
[self.navigationController pushViewController:sVC animated:YES]; 
[sVC release]; 

的初始設置之上是在加載所述第二屏幕/的ViewController到導航控制器搜索視圖控制器的代碼。但屏幕2頂部的後退按鈕在屏幕2中有單詞屏幕2,當我按一次它重新加載自身,然後後退按鈕說搜索(這是第一屏幕的標題)。這次按它將它帶回到第一個屏幕。

我只是困惑爲什麼後退按鈕顯示視圖控制器自己的標題名稱並重新加載自己。我沒有在這些屏幕的任何其他代碼真的,它們與顯示該屏幕的標籤只是空白屏幕是那裏,而我學習如何使用它正確

+0

正如有人好心在我的問題一個向我指出,你可以使用self.navigationController.viewControllers,看看你確實有你的導航堆棧。那裏可能有些腥意。 – Monolo

+0

爲提示而歡呼。這表明我不知何故我的第二個視圖控制器被加載兩次。現在來追蹤那個 – TiltedWindmill

回答

1

在蘋果文檔的UINavigationController的指定初始化

- (id)initWithRootViewController:(UIViewController *)rootViewController 

它指出:

每個導航堆棧必須至少有一個視圖控制器充當根。

我建議嘗試用rootViewController初始化UINavigationController

0

TiltedWindmill,我以前遇到過這個問題。就我而言,在我的頭上,我想這樣做:

(> =推視圖控制器)

開始在的MapViewController>詳細信息關於一個景點的地圖上點擊針>的MapViewController>然後推另一DetailsViewController。

在我的MapViewController中,此視圖控制器已註冊通知。理論上,我認爲我正在像這個Map> Details View Controller> Map> Details View Controller一樣進行導航。事情是,每當我點擊地圖上的引腳時,通知被觸發,導航堆棧上的MapViewController的兩個副本都響應通知。

因此,它推送了相同DetailsViewController的兩個副本。所以,真正的導航是這樣的:

地圖>詳細信息視圖控制器>地圖>詳細信息視圖控制器COPY1 + DetailsViewController COPY2

*> =第二細節視圖控制器推ontop的前一個,但到不可見眼。

當我去按後退按鈕時,它彈出DetailsViewController copy2並顯示相同的視圖控制器(DetailsViewController copy1)。

我通過告訴我的MapViewController取消訂閱事件viewDidDisappear上的通知來修復它。

不知道你是否瞭解,:P

相關問題