2010-12-05 64 views
0

我現在有很多麻煩,現在讓我的navigaton欄正常工作。以下是我的等級。UI選項卡欄和導航欄到詳細視圖

TabBarController 
    -- NavigationController 
    -- View 
    -- Navigation Controller 
    -- View 
    -- Navigation Controller 
    -- View 

我有一個抽象類,我從每個標籤欄視圖繼承。這個抽象類被設置爲NavigationBar委託並具有導航欄iboutlet。

在我的一個觀點中,我設置了一個表格視圖,當有人選擇表格視圖時,我希望它轉到更詳細的視圖。以下是我正在使用的代碼。當我設置xib時,我將NavigationBar拖動到視圖上,然後將「VisitedPlace」的ViewController設置爲導航欄的代表。

// Called when a row in the table view has been selected. 
// This method will change the view to the current place detailed view 
- (void) tableView:(UITableView *) tableView didSelectRowAtIndexPath:(NSIndexPath *) indexPath { 

    NSLog(@"We are here, and proud of it I suppose~"); 
    PlaceViewController *placeView = [[PlaceViewController alloc] initWithNibName:@"PlaceView" bundle:[NSBundle mainBundle]]; 
    [self.navigationController pushViewController:placeView animated:YES]; 
    [placeView release]; 
    placeView = nil; 

}

當我選擇打印日誌消息的行,但沒有發生。

我現在很迷茫,我必須缺少一些至關重要的東西。我正在閱讀關於NavigationController以及我如何實現它,但要完全誠實,我不知道如何做到這一點。

編輯: 當我NSLog'd self.navigationController它是零,所以我拖動了一個NavigatonController並將代理設置爲VisitedPlaces的文件所有者。但是,導航控制器仍然是零。

任何幫助將不勝感激!

+1

驗證self.navigationController不是零 – vikingosegundo 2010-12-05 02:43:47

+0

它是零。我將一個導航控制器拖入VisitedPLaces.xib。我希望導航欄在標籤欄仍然存在的情況下推送和彈出視圖。 – 2010-12-05 17:56:34

回答

1

層次結構在你的問題上是否顯示導航控制器,但你描述的拖動導航欄,以你的觀點在Interface Builder。我認爲你混淆了這兩件事。您正在向現有視圖添加導航欄,但導航欄僅僅是一個UIView子類。將它添加到你的視圖也不會創建一個導航控制器(一個UIViewController子類),所以這就是爲什麼你得到零你的self.navigationController屬性,爲什麼當你發送推送消息到該屬性什麼都沒有發生。首先,如果你還沒有看過MVC(模型,視圖,控制器)設計模式,因爲視圖和控制器之間的區別就是你需要在這裏理解的東西。

UINavigationControllers不直接顯示太多內容。他們所做的只是管理其他UIViewControllers的堆棧。 UINavigationBar是UIViewController直接顯示的唯一視圖。當您告訴導航控制器將視圖控制器推入堆棧時,導航控制器會適當地更改導航欄並在屏幕上爲新視圖控制器的視圖添加動畫。 UINavigationBar只是一個由導航控制器管理的啞巴UIView。它本身不包含用於管理視圖控制器堆棧的任何功能(這應該是MVC方法的一個明顯的假設,因此我的建議如上)。

無論是在界面構建器還是代碼中(我更喜歡後者),都需要創建一個UINavigationController。實際上,您需要爲選項卡欄中的每個選項卡創建一個。將您的UITabBarController的viewControllers屬性設置爲這些導航控制器的數組。

然後,這些導航控制器中的每一個都需要被賦予一個視圖控制器來顯示爲它們的第一個項目。您可以通過將導航控制器的rootViewController屬性設置爲要在導航控制器堆棧頂部顯示的視圖控制器來執行此操作。

你跟着這個嗎?我不覺得我在解釋它時做得很好。我希望這有幫助。如果沒有,請說出來,我會盡力做得更好。

編輯

僅供參考,有些時候,你可能希望使用UINavigationBar的無導航控制器。那就是如果你正在實現自己的系統來跟蹤視圖控制器並在屏幕上和屏幕外動畫它們。 UITabBar也是如此,另一種視圖不應該與視圖控制器相似的名稱混淆。

0

調試和檢查self指向visitedPlaced對象或不

相關問題