2011-09-01 45 views
4

我已經創建了一個名爲addItemToListViewController的UIViewController子類。我選擇添加一個「xib」,並且創建了一個帶有幾個標籤和一個textField的簡單頁面。在界面生成器中,我選擇了「頂部欄 - 導航欄」,這樣當應用程序運行時將其放在堆棧上時,它將有一個頂部欄與最初的主窗口相匹配。在「界面」構建器中,它顯示頂部邊框,但是當我在模擬器中運行應用程序時,一旦顯示視圖,頂部欄不會顯示。頂部欄不會出現目前ModalViewController

這裏是我放置在RootViewController的代碼來呈現視圖控制器

- (IBAction)addButtonPressed:(id)sender 
{ 
    AddItemToListViewController *addItemToListViewController = [[AddItemToListViewController alloc] initWithNibName: @"AddItemToListViewController" bundle:nil]; 

    [self presentModalViewController: AddItemToListViewController animated: YES]; 
    [AddItemToListViewController release]; 
} 

我只能夠有頂杆本如果我手動添加導航條的XIB。如果我必須添加一個導航欄到我的xib,「Top Bar」屬性的目的是什麼?

+0

是rootViewController和UINavigationController嗎?看起來你最終想要的就像是一個UINavigation控制器,因爲你有一個頂部欄的主視圖,然後你用相同的頂部導航欄將UIViewController推到堆棧上。如果是這樣的話,我可以添加一些代碼。只是想了解你之後的終極體驗 – bryanmac

回答

5
- (IBAction)addButtonPressed:(id)sender 
{ 
    AddItemToListViewController *addItemToListViewController = [[AddItemToListViewController alloc] initWithNibName: @"AddItemToListViewController" bundle:nil]; 
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:addItemToListViewController]; 
    [self presentModalViewController: navController animated: YES]; 
    [AddItemToListViewController release]; 
    [navController release]; 
} 
+0

這不會給你*相同的*頂部吧? – bryanmac

+1

頂部欄僅用於模擬目的,以便您可以根據導航欄調整xib文件中的uiview對象。它用於查看導航控制器推動視圖控制器時視圖的外觀。 – Robin

+0

如果我通過代碼以這種方式添加了導航控制器而不是界面生成器,那麼我如何向頂部條添加標題? – 5StringRyan

1

xib不知道你將使用控制器作爲模態視圖,因爲它也可以用於可以顯示頂欄的普通視圖。只有當您推送視圖時,它纔會使用或忽略此頂部欄的顯示。

簡而言之:它的存在的情況下,您將使用廈門國際銀行的普通視圖:)

4

即「頂欄 - 導航欄」中的InterfaceBuilder是什麼所謂的「模擬公制」。當其他視覺元素(狀態欄,導航欄或標籤欄)可能會消耗設備的某些屏幕空間時,它可以幫助您以正確的間距佈局視圖。除了縮小由NIB定義的視圖的垂直尺寸之外,它實際上並沒有做任何事情。目的是幫助您佈置您的視圖,而不是實際上創建將出現在您的應用中的組件。

如果你想要一個導航欄,那麼你有兩個選擇。第一種選擇是使用導航控制器(其中您最初的看法則要根),並調用

[self.navigationController pushViewController:newVC animated:YES]; 

正確設置導航控制器等的過程,是平凡的,你應該做的一些搜索尋找最好的方式來爲你的應用程序做到這一點。對於一個簡單的應用程序,尤其是如果你剛剛學習iOS時,你可以在創建一個新項目時使用「基於導航的應用程序」模板。使用navcon,您可以獲得與該頂部欄相關的所有花哨行爲 - 自動後退按鈕,轉換爲詳細視圖時的花式左/右滾動等。

第二種方法是將「假「導航欄在詳細視圖中,使用導航欄對象。您可以在XCode的「實用程序視圖」(最右側窗格)的下半部分找到該對象以及一些其他相關對象。只需將對象拖入XIB和blammo中,即可獲得44像素高的灰色條。這個導航欄就像你使用導航控制器時所得到的,除非你沒有獲得堆棧功能;你仍然可以在左側和右側添加按鈕,更改標題,將其色調爲特定顏色等。

+0

我最終想要做的就是將此AddItemToListViewController與導航「欄」並添加按鈕(取消和保存)。我已經嘗試了通過在xib上拖動導航欄對象,然後拖動兩個按鈕來列出第二個選擇。這是我嘗試的第一選擇,因爲它比您所描述的導航控制器設置更「微不足道」。哪個是首選方法,爲什麼?另外,有沒有辦法使用界面構建器設置導航控制器以備將來參考,而不是在代碼中進行操作? – 5StringRyan

+0

如果您有一個全部使用導航欄的視圖序列(堆棧),並且每次按下視圖時都想要「後退」按鈕,則首選第一種方法。後一種方法是可以接受的,如果你只是想要一個標題欄,也許某個地方掛一些按鈕。 – AndrewS

+0

至於使用IB - 最簡單的添加導航欄的方法是使用基於導航的應用程序模板。如果您有基於標籤欄的應用程序,則可以將導航控制器拖到其中一個選項卡中。在代碼中,創建新的導航控制器然後呈現它很容易。一般來說,你不要繼承UINavigationController - 你創建自己的VC,然後將它們推入navcon。因此,您只需使用項目模板或tabbar設置navcon一次。 – AndrewS