2010-10-15 49 views
0

我正在處理導航堆棧中具有三個表視圖控制器的應用程序。根視圖控制器和第二個VC有工具欄,但我想添加一個子視圖到第二個視圖控制器like this。 (顏色只是爲了可視化。)將UIView子視圖添加到導航堆棧中的單個表視圖控制器

我想以編程的方式添加視圖,因爲我沒有能夠用IB來完成,而沒有大的頭疼。現在,我已經能夠種得到我想要的東西在這樣的第二視圖控制器繪製一個UIView:

- (void)viewDidLoad { 
     [super viewDidLoad] 

     UIView *detailView = [[UIView alloc] initWithFrame:CGRectMake(0, 392, 320, 44)]; 
     detailView = [UIColor redColor]; 
     [self.navigationController.view addSubview:detailView]; 
     [detailView release]; 
} 

這種方法的問題是,一旦UIView的是第二種觀點裝控制器,它保持加載並在第三個和根視圖控制器中繪製。我已經嘗試了各種刪除UIView的方法,包括在viewDidUnload中將detailView設置爲nil,在didSelectRowAtIndexPath(從整個棧中刪除視圖)中調用removeFromSuperview。

我也嘗試將subview添加到self.view,但是它將它推到table view的可見區域下面,所以我必須向上滾動才能看到它,並且當我放開時它會反彈回來。

顯然,將此子視圖添加到導航控制器並不是實現我想要的最佳方式,但我對於從這裏走向何處感到不知所措。

回答

2

正如你已經發現的,你絕對不應該進入導航控制器的視圖。

您希望您的SecondViewController是一個UIViewController一個實現的UITableViewDelegate和UITableViewDataSource,其觀點勾畫出的UITableView和UIView的你想使用在它自己的主要的UIView你靜止「頁腳」。

它有助於記住,UITableViewController最終只是創建一個視圖控制器的便利,其視圖完全由UITableView組成。

無論如何,您可以從this read-only svn repo中瀏覽它(或svn co),而不是嘗試在該答案中內嵌一堆代碼。

編輯(現在,這不是午夜,直接把一些代碼/解釋在回答):

對於將控制器推到需要頁腳創建一個新的基於的UIViewController類(資產淨值棧不要選中模板選擇對話框中的'UITableViewController子類'框)。

添加要成爲額外底部視圖的UITableViewUIView的實例變量。

@interface SecondViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> { 
    UITableView* tableView; 
    UIView* customFooterView; 
} 
@property (nonatomic,retain) IBOutlet UITableView* tableView; 
@property (nonatomic,retain) IBOutlet UIView* customFooterView; 
@end 

在IB添加一個UITableView和UIView的現有根視圖控制器和佈置它們的期望(可能是值得改變自動調整參數太多,如果你的應用程序可以在橫向和縱向使用) 。將兩個視圖連接到爲「文件所有者」定義的出口,並確保將代理和數據源屬性指向「文件所有者」。

然後根據您的應用程序恰當地實現UITableViewDelegate和UITableViewDataSource協議。

如果要在IB中佈置整個「頁腳」視圖,請繼續前進。否則,您可以在viewDidLoad中以編程方式輕鬆添加項目(並記住在viewDidUnload中將其拆分)。

1

不知道你正在尋找其行爲,但嘗試其中之一:

  • 分配的DetailView到第二VC中的tableview的tableFooterView財產。

  • 減少表視圖的高度並將detailView添加到self.view。

+0

頁腳視圖不起作用,因爲子視圖需要始終可見,即表格視圖應該滾動到「後面」。 – 2010-10-15 01:55:10

+0

你應該減小表視圖的高度,或者如果你真的想要在它後面滾動,添加detailView到self.view,然後執行'[self.view bringSubviewToFront:detailView]'(釋放之前)。 – Anna 2010-10-15 01:57:42

+0

如果我將子視圖添加到自我,然後我將它附加到tableview,所以它與tableview滾動。我希望子視圖在工具欄上方靜止不動。 – 2010-10-15 02:22:56

2

我不喜歡這種方法。你應該把你的表格視圖放到另一個視圖中,並把你的細節視圖放在一起。

儘管如此,我認爲你可以在你的視圖控制器的viewWillDisappear方法中刪除你的視圖。我也注意到,你沒有讓你detailView爲私有變量,你應該做的,因爲你需要引用它後來在取出時(我仍然不知道你是如何做的。)

注意viewDidUnload被稱爲視圖卸載的情況下(即從其控制器釋放),所以它與導航無關。

相關問題