2010-03-23 60 views
0

我想添加一個視圖到我的屏幕底部。控制器是一個UITableViewController,我該如何縮小tableView並在tableview的底部添加一個額外的視圖?如何在IB中構建TableView時降低其高度?

我試過在不同的地方設置self.tableView的框架(viewDidLoad,viewWillAppear等),但沒有任何反應。 tableView是由IB創建的,而不是編程的。

我已經嘗試添加頁腳到我的表格視圖,但這不是我想要的,因爲頁腳實際上滾動了,我想要在屏幕底部的靜態非移動視圖。

回答

0

您想要更改-loadView方法。不是viewDidLoad或viewWillAppear。這將允許您使用您的tableview進行其他配置,即使它是在IB中創建的。

- (void)loadView { 
[super loadView]; 
CGRect titleRect = CGRectMake(0, 0, 300, 40); 
UILabel *tableTitle = [[UILabel alloc] initWithFrame:titleRect]; 
tableTitle.textColor = [UIColor blueColor]; 
tableTitle.backgroundColor = [self.tableView backgroundColor]; 
tableTitle.opaque = YES; 
tableTitle.font = [UIFont boldSystemFontOfSize:18]; 
tableTitle.text = [curTrail objectForKey:@"Name"]; 
self.tableView.tableHeaderView = tableTitle; 
[self.tableView reloadData]; 
[tableTitle release]; 
} 
+0

將視圖添加到頁眉/頁腳視圖並不是我想要的,因爲該視圖將隨表格一起滾動,我希望靜態的東西留在那裏,無論您滾動到何處。我試過在loadView中設置框架,當然它不起作用。它總是回到最大化的高度。 – erotsppa 2010-03-23 22:36:18

1

我不是說你不能這樣做,否則,但你可能不希望這種情況UITableViewController。你仍然可以讓你的視圖控制器實現UITableViewDelegateUITableViewDataSource,但將一個香草UIView放入你的筆尖,在其中放置一個UITableView。然後,確保將視圖出口設置爲包含您的表格的UIView。這具有允許您在IB內創建額外視圖的效果。我只是試過這個,它似乎工作。

+0

由於使用SplitViewController進行iPad開發,viewController必須是TableViewController – erotsppa 2010-03-23 23:31:28

0

我不知道該怎麼做,在IB,但這樣做在代碼的方式是這樣的:

- (void) loadView 
    { 
     UITableView *tv = [[UITableView alloc] initWithFrame: rect 
style: UITableViewStyleGrouped]; 
     // finishg configuring table view 
     self.view = tv; 
     [tv release]; 
    } 

試圖做到這一點在兩個階段 - 第一的風格,然後框架或框架第一,然後風格 - 他們都沒有工作。

1

我猜你正在使用UINavigationController。將控制器推入導航堆棧時,UINavigationController會將其視圖調整爲全屏,忽略您在IB中定義的幾何和自動調整行爲。

這個調整大小似乎發生在viewWillAppear:之後。在過去,我調用了[super viewDidAppear:]之後,我已經成功調整了表視圖的大小並在viewDidAppear中添加了兄弟視圖。不過,這有點危險,因爲Apple可以通過改變UINavigationController在幕後工作的方式來打破它。

更安全的選擇是將視圖控制器推到控制包裝視圖的導航堆棧上。然後添加你的UITableView和它的兄弟作爲該包裝視圖的子視圖。關於這個選項的煩人的事情是,你可能會想要使用嵌套的UITableViewController來管理你的非全屏幕表格視圖,但是UIViewController的文檔說它僅用於管理全屏視圖。如果你決定忽略這個警告並嵌套你的視圖控制器,你會發現viewWill/DidAppear/Disappear不會在嵌套控制器上被調用,所以你必須從你的包裝視圖控制器手動委派這些方法。缺乏對嵌套控制器的支持是我對UIKit最大的寵兒之一,我竭盡全力去設計它。

如果您想要使用視圖控制器僅適用於全屏視圖,則可以推送普通視圖控制器來控制全屏包裝視圖,手動實現視圖控制器中的所有UITableViewDataSource和UITableViewDelegate方法,以及將其設置爲您的表格視圖的代表。

+0

這很有趣,我從來沒有注意到文檔中的那一行。我使用UIViewControllers來查看小於屏幕所有時間的視圖,但如果視圖相對簡單,我通常會將控制器邏輯摺疊到視圖本身中。 哦,還有+1的「腳趾線」。 – Amagrammer 2010-03-24 13:33:20

+0

由於使用SplitViewController進行iPad開發,viewController必須是TableViewController – erotsppa 2010-03-24 17:03:45