带有标题区的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]; }
请享用!
您将不得不将UITableView
embedded到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自定义视图作为页眉和页脚的视图。