2010-03-23 26 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