2013-05-13 133 views
0

我有一個UITableViewController它成功地列出了從CoreData實體獲取的表視圖數據。停止導航欄滾動表

我想在頂部有一個導航欄,有幾個按鈕可以導航,但是當我添加導航欄時,它似乎坐在表格內,在任何列表的下方,因此在滑動時用表格滾動通過表格列表。

因爲它是一個UITableViewController我不能讓表格區域變小,所以我不知道如何添加表格外的導航欄。

任何建議如何使修復導航欄就位,以便它不會移動。

下面是使用代碼來設置導航欄:

- (void)viewDidLoad 
{ 

UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0,0, 1024,44)]; 
UINavigationItem *navItem = [[UINavigationItem alloc] initWithTitle:@"Observation details"]; 
[navBar pushNavigationItem:navItem animated:NO]; 
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:self action:@selector(backButton)]; 
navItem.leftBarButtonItem = backButton; 
UIBarButtonItem *detailsButton = [[UIBarButtonItem alloc] initWithTitle:@"Observation Details" style:UIBarButtonItemStyleBordered target:self action:@selector(detailsButton)]; 
navItem.rightBarButtonItem = detailsButton; 
[self.view addSubview:navBar]; 
} 
+0

您使用的是Interface Builder嗎? – Groot 2013-05-13 10:26:25

+0

使用故事板?我應該以編程方式做這個嗎? – RGriffiths 2013-05-13 10:27:18

+0

你是如何添加導航欄以及它是什麼類型的UI項目的?系統提供的標準導航欄不應該滾動。 – 2013-05-13 10:32:05

回答

2

不要拖導航欄和表視圖下降。這樣您就可以將該視圖(導航欄)設置爲表視圖的標題。

要做你想做的事情,最簡單的方法是使用一個導航控制器與表視圖作爲它的rootTableView。

myNavController = [[UINavigationController alloc] initWithRootViewController:myVC]; 

[self presentViewController:myNavController ... 

您還可以使用沒有導航控制器的導航欄。爲此,您必須在頂部設置一個帶有導航控制器的視圖,並在表格視圖中填充視圖的其餘部分。

+0

@RichardGriffiths:發佈代碼你是如何以編程方式進行的。 – Rakesh 2013-05-13 10:52:54

+0

@Richard如果你正在使用故事板,你只需要包含一個導航控制器。這很簡單。如果您想以編程方式執行此操作,則必須聲明一個變量或屬性以保留導航控制器。我要編輯我的答案,告訴你如何去做。 – Gabriel 2013-05-13 11:19:54

+0

非常感謝您的幫助。你能看到上面的迴應嗎?我現在有一個導航控制器,它可以顯示錶格,但仍然無法讓導航欄表現出來! – RGriffiths 2013-05-13 17:08:26

1

有幾種方法可以實現這一點。我試圖描述其中的一種,我認爲這是最簡單的,根據我認爲是你目前的經驗水平。

使用單獨的視圖控制器創建一個新的空視圖。 將兩個子視圖添加到類型容器視圖的該視圖。這些視圖被設計爲攜帶具有其自己的視圖控制器的視圖。其中一個容器位於頂部,具有導航欄的大小幷包含導航欄等。 對於那個容器,您可以創建一個單獨的視圖控制器。但是,我沒有看到爲什麼這個視圖控制器不是同一個理由。 (文件的所有者在IB) 它可能是一個單獨的實例/類。那取決於你。

其餘視圖被第二個容器視圖佔用。這其中包含UITableView,其中UITableViewController(-subclass)是文件的所有者。

除非您更熟悉視圖層次結構和視圖控制器層次結構,否則不應該使用表視圖控制器和表視圖之間具有1:1關係的模式(如默認sceleton代碼和教程等所給出的) 。 A UITableViewController與每個UIViewController都有一個view屬性。但是對於一個UITableViewController,它必須是UITableView而沒有別的。標準UITableViewController不能處理UIView作爲view屬性,該屬性包含表視圖和其他視圖作爲兄弟。再加上它是不是一個好主意,添加更多的子視圖的滾動行爲等方面的表視圖

通過分離他們你可以處理表,並仍然採取示例straigt教程代碼加上你可以有一個導航在頂部不受桌子影響的酒吧。

但是,我應該提及,通過使用適當的導航控制器可以讓所有這些變得更容易。這將免費提供您的導航欄。你不能這樣做,你必須擁有良好的職業。

+0

我真的很感謝你投入這個時間 - 謝謝。我正在嘗試導航控制器方法,因爲大家都在說它非常簡單。我得到了表視圖的工作,但由於某種原因導航欄根本不顯示應用程序運行時。我是新手導航控制器,我不確定是否需要這兩個視圖(一個導航和一個表)。我正在閱讀它,但無處可去。這裏非常差的互聯網也意味着沒有視頻訪問。總之,導航欄不顯示的原因可能有一些簡單的原因嗎? – RGriffiths 2013-05-13 17:04:21

+0

我現在已經注意到,只要我將表格與上一個視圖中的按鈕連接起來,使用segue,表格視圖上的導航欄就會消失! – RGriffiths 2013-05-13 17:08:02

+0

真的很感謝你的幫助。見下文。 – RGriffiths 2013-05-13 17:30:46