2010-04-21 24 views
0

裏面我正在開發,目前有一個視圖控制器的應用(稱之爲ViewControllerX)。該MainWindow.xib中的文件包含以下內容:的UITableView和UIImage的一個UIView

File's Owner    UIApplication 
First Responder   UIResponder 
AppX App Delegate   myAppDelegate 
myViewControllerX   myViewControllerX 
Window     UIWindow 

當我在Interface Builder看看它的MainWindow.xib視圖中顯示來自「myViewControllerX」加載。造成這種情況的myViewControllerX.xib文件包含以下內容:

File's Owner    UIApplication 
First Responder   UIResponder 
MainView     UIView 
    Image View (image1.jpg) UIImage View (Inside MainView) 
    Rounded Rect Button  UIButton (Inside MainView) 
    Rounded Rect Button  UIButton (Inside MainView) 
    Table View    UITableView (Inside MainView) 

在表格視圖中,我有奧特萊斯設置爲數據源=文件的所有者和代表=文件的所有者。引用出口設置爲使用XCode中的IBOutlet定義的mTableView。當我運行這一切工作正常,表填充。

當用戶點擊表視圖中的一個項目時,我想要一個新的視圖滑動到位,其中還包含一個TableView(基本上第一個視圖控制器顯示一個概覽列表,當用戶點擊一個我想要的項目時以顯示選擇的細節)。在myViewControllerX.m文件,我有以下代碼:

- (void)tableView:(UITableView*)theTableView didSelectRowAtIndexPath:(NSIndexPath*)theIndexPath 
{ 
[self.navigationController pushViewController:self.mViewControllerY animated:YES]; 
} 

我創建了一個ViewControllerY並具有以下文件:

ViewControllerY.xib,ViewControllerY.m和ViewControllerY.h。

在爲ViewControllerY中的.xib文件,我有:

File's Owner    UIApplication 
First Responder   UIResponder 
Table View    UITableView 

當我運行這個它的工作原理(這樣的代碼,並在Interface Builder鉤起坐都OK)。問題是它接管了整個視圖,而我希望它有一個圖像(和其他UI對象)以及一個表視圖。我試着改變ViewControllerY的UITableView的是類型的UIView,然後以類似的方式來ViewControllerX添加的UIView內的的UIImageView和UITableView的,但我不能讓它的工作,現在我不知道該怎麼辦!所以,我的問題是,我該如何去實現這個?我希望能夠在Interface Builder中設置它,那麼如何更改它來處理這個問題? e.g如何關聯DataSource,代表和奧特萊斯等

預先感謝在此的任何幫助。我嘗試了各種各樣的東西,但我似乎無法讓它工作。我敢肯定,我幾乎在那裏,必須失去一些非常明顯的東西!

一切順利 戴夫

回答

0

退後一步,做多一點挖後,我想出了答案。

高層解釋。

ViewControllerY需要是UIViewController類,而不是UITableViewController。 .h文件中的ViewControllerY:UIViewController定義應包含表視圖委託和數據源協議。 ViewControllerY的成員必須持有UITableView * - 將其稱爲mTableView,並且應該將其定義爲IBOutlet。

表視圖委託方法應該使用self.mTableView來訪問表。

在Interface Builder中,UIView對象需要連接到文件所有者的Outlet「視圖」,並且UIView內部的表視圖需要將dataSounce和Delegate設置爲文件的所有者,並且mTableView Outlet也需要被掛鉤到文件的所有者。

低級說明。

在ViewControllerY.h

做到以下幾點:

@interface ViewControllerY : UIViewController <UITableViewDelegate,UITableViewDataSource> 
{ 
UITableView* mTableView; 
} 

@property (nonatomic, retain) IBOutlet UITableView* mTableView; 

在ViewControllerY.m,在表視圖委託方法,請訪問mTableView像這樣:

myNewCell = (UITableViewCell*)[self.mTableView dequeueReusableCellWithIdentifier:myCellIdentifier]; 

(很明顯,你需要定義並以正常方式處理所有其他表格視圖方法。

ViewControllerY.xib應該具有以下內容:

File's Owner  ViewControllerY 
First Responder UIResponder 
View    UIView 
    Image View  UIImageView 
    Table View  UITableView 

控制從文件所有者拖到視圖並選擇「視圖」。 控制從表視圖拖動到文件的所有者並選擇數據源。 控制從表視圖拖動到文件的所有者並選擇Deligate。 控制從文件所有者拖到表視圖並選擇mTableView。

就是這樣!然後,您可以在UIView中添加其他UI對象,並以正常的方式將它們連接起來。我不確定這是唯一的還是最好的解決方案,但是有效,我對此感到滿意。

希望這可以幫助有相同或類似問題的人。這有點讓人困惑,直到你掌握它。

0

UINavigationController使用或多或少完全覆蓋設備屏幕內容視圖。這個視圖用於你的主視圖。如果您要求此UINavigationController推送另一個視圖,他使用這個完全相同的視圖來交換ViewControllerYs視圖,該視圖也覆蓋了整個屏幕。

爲了獲得你所需要的行爲,你應該創建第二個「嵌入式」導航控制器實例,它僅適用於部分最初由你的表視圖負責。將您的表格視圖顯示爲主視圖,然後讓此導航控制器將您的其他視圖切換到屏幕的這一部分。

+0

我真的不明白這個答案,所以不知道它是否會奏效。然而,自從最初發布我做了一些更多的工作,現在有一個答案似乎工作得很好。請看下面我的答案。 – Baldrik3505 2010-04-22 12:09:03