我想在屏幕底部添加一个视图。控制器是一个UITableViewController,如何缩小tableView并在tableview的底部添加一个额外的视图?
我尝试在不同的地方设置self.tableView的框架(viewDidLoad,viewWillAppear等),但没有任何反应。 tableView由IB创建,而不是以编程方式创建。
我已经尝试在我的桌面视图中添加一个页脚,但这不是我想要的,因为页脚实际上向上滚动,我想在屏幕底部显示静态不动的视图。
答案 0 :(得分:1)
我不是说你不能这样做,但你可能不希望UITableViewController
这种情况。您仍然可以让您的视图控制器实现UITableViewDelegate
和UITableViewDataSource
,但在您的笔尖放置一个UIView
,UITableView
。然后,只需确保将视图出口设置为包含表格的UIView
。这样可以让您在IB中创建附加视图。我刚尝试了这个,它似乎工作。
答案 1 :(得分:1)
我猜你正在使用UINavigationController。当您将控制器推入导航堆栈时,UINavigationController会将其视图调整为全屏,忽略您在IB中定义的几何体和自动调整行为。
这个调整大小似乎发生在viewWillAppear:之后。在调用[super viewDidAppear:]之后,我在调整表视图并在viewDidAppear:中添加兄弟视图时取得了一些成功。这有点冒险,因为Apple可以通过改变UINavigationController在幕后工作的方式来打破它。
更安全的选择是将视图控制器推送到控制包装器视图的导航堆栈上。然后添加您的UITableView及其兄弟作为该包装器视图的子视图。关于这个选项的烦人的事情是你可能想要使用嵌套的UITableViewController来管理你的非全屏表视图,但UIViewController的文档说它只是为了管理全屏视图。如果您决定忽略此警告并嵌套视图控制器,您会发现在嵌套控制器上不会调用viewWill / DidAppear / Disappear,因此您必须从包装器视图控制器手动委派这些方法。这种对嵌套式控制器的支持不足是我对UIKit最大的烦恼之一,而且我已经竭尽全力为它设计工作。
如果您想要使用视图控制器并仅使用视图控制器进行全屏视图,则可以推送控制全屏包装器视图的普通视图控制器,在视图控制器中手动实现所有UITableViewDataSource和UITableViewDelegate方法,并设置它作为表视图的委托。
答案 2 :(得分: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];
}
答案 3 :(得分:0)
我不知道如何在IB中执行此操作,但在代码中执行此操作的方法是:
- (void) loadView
{
UITableView *tv = [[UITableView alloc] initWithFrame: rect
style: UITableViewStyleGrouped];
// finishg configuring table view
self.view = tv;
[tv release];
}
尝试分两个阶段进行 - 首先是样式,然后是框架或框架然后是样式 - 它们都不起作用。