带有标题区的iPhone UITableView

我有一个与所有默认的UITableView东西创build的视图,但现在我需要在UITableView上方添加一个头区域(所以UITableView将正常滚动,但屏幕的前100像素,所以将有静态头内容)。 我没有看到我可以在IB中调整UITableView大小,我不知道如何做到这一点。

有人知道吗?

你为什么不使用UITableView提供的头? 如下:

 - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { return @"My Title"; } 

此外,您可以通过拖动边框来调整IB中的表格视图。

您可以使用UITableViewDelegate方法为表创build自定义标题视图并指定高度,即tableView:viewForHeaderInSection:tableView:heightForHeaderInSection: tableView:viewForHeaderInSection: 你可以添加任何你喜欢的视图。 下面是一个添加右alignmentUILabel的示例:

 - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0,0,tableView.frame.size.width,30)]; UILabel *headerLabel = [[UILabel alloc] initWithFrame:CGRectMake(60, 0, headerView.frame.size.width-120.0, headerView.frame.size.height)]; headerLabel.textAlignment = NSTextAlignmentRight; headerLabel.text = [titleArray objectAtIndex:section]; headerLabel.backgroundColor = [UIColor clearColor]; [headerView addSubview:headerLabel]; return headerView; } -(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { return 30.0; } 

当你使用IB将UIView或它的一个子类添加到UITableView (只需拖动一个UIView并将它放到你的UITableView的UPPER部分),它会自动添加该UIView组件,并使其成为“tableHeader”组件。

每个UITableView有一个tableHeader和一个tableFooter组件保留…

这样,新的视图将成为UITable的一部分,随着它滚动或出现/消失,或者你对桌子做的任何事情。 如果您需要条件行为,您可以更改其隐藏的属性。

另一方面,如果你希望标题视图保持放置,随着表格的滚动,那么最好把表格缩小一些,并把标题放在其它答案中的build议之上。

我终于在不改变基类的情况下正确地解决了这个问题。 将视图添加到父导航控制器的一个答案很好,但过渡看起来很可怕。

修复其实很简单。 诀窍是为self.tableView属性创build自定义setter和getter。 然后,在loadView中,用新鲜的UIViewreplace视图并添加tableView。 然后你可以自由地在tableView中添加子视图。 这是如何完成的:

在标题中:

 @interface CustomTableViewController : UITableViewController { UITableView *tableView; } 

在.m中:

 - (UITableView*)tableView { return tableView; } - (void)setTableView:(UITableView *)newTableView { if ( newTableView != tableView ) { [tableView release]; tableView = [newTableView retain]; } } - (void)loadView { [super loadView]; //save current tableview, then replace view with a regular uiview self.tableView = (UITableView*)self.view; self.view = [[UIView alloc] initWithFrame:self.tableView.frame]; [self.view addSubview:self.tableView]; //code below adds some custom stuff above the table UIView *customHeader = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 20)]; customHeader.backgroundColor = [UIColor redColor]; [self.view addSubview:customHeader]; [customHeader release]; self.tableView.frame = CGRectMake(0, customHeader.frame.size.height, self.view.frame.size.width, self.view.frame.size.height - customHeader.frame.size.height); } - (void)viewDidUnload { self.tableView = nil; [super viewDidUnload]; } 

请享用!

您将不得不将UITableViewembedded到UIView ,同时将另一个视图(您指的是标题部分)embedded到UIView

所以, UIView将有2个子视图。 标题视图后跟表视图。

  • UIView (父)
    • UIView (标题)
    • UITableView (表)

希望这可以帮助。

我喜欢noodl_es(upvoted)的答案,因为它提供了你想要的function和行为,但是你不必担心调整UITableView的大小:这是自动处理的。 但是,只有头信息专门针对表的第一部分(或者表只有一个部分),解决scheme才是最合适的。 如果表格有多个部分,则第二部分的标题将在滚动时推开第一部分的标题,因此标题视图不会与整个表格相关。

在iphonedevsdk上find解决scheme

而不是这样做:

 [tableViewController.view addSubview:viewSubclass]; 

做这个

 [tableViewController.navigationController.view addSubview:viewSubclass]; 

假设有你的UITableViewController

 @interface MXMTableViewController : UITableViewController <UITableViewDelegate,UIScrollViewDelegate> { /// your table view interface here } 

和一个简单的UITableView定义在它的xib,你可以做Mihir说覆盖loadView方法是这样的:

 - (void)loadView { [super loadView]; UIView *mainView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)]; self.view = mainView; [mainView release]; // Add Header View UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 36)]; headerView.backgroundColor = [UIColor redColor]; [self.view addSubview:headerView]; // now, move your table view down. Check you nib to choose // the right Y-axis offset CGRect f = tableView.frame; f.origin.y += headerView.frame.size.height/2; tableView.frame = f; // Add the table view to the container view [self.view addSubview:self.tableView]; // Add footer UIView *footerView = [[UIView alloc] initWithFrame:CGRectMake(0, self.tableView.frame.size.height, 320, 125)]; footerView.backgroundColor = [UIColor redColor]; [self.view addSubview:footerView]; [footerView release]; [headerView release]; } 

…就是这样。 你有一个固定的页眉和页脚的UITableView

PS。 您现在可以使用您的xib自定义视图作为页眉和页脚的视图。