我需要自定义UITableViewController
的标题部分,其中每个部分返回不同的标题文本(从数据源获取数据)。这可以使用以下方法完成:
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
NSArray *temp = [listOfMBeans allKeys];
DLog(@"MBean details: %@", temp);
NSString *title = [temp objectAtIndex:section];
DLog(@"Header Title: %@", title);
return title;
};
这很好用,我可以看到预期的输出。但是,我还需要更改文本的字体大小,在查看类似的问题后,我实现了以下内容:
- (UIView *) tableview:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
DLog(@"Custom Header Section Title being set");
UIView *headerView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, 30)] autorelease];
UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, 30)] autorelease];
label.text = [tableView.dataSource tableView:tableView titleForHeaderInSection:section];
label.backgroundColor = [UIColor clearColor];
label.font = [UIFont boldSystemFontOfSize:14];
[headerView addSubview:label];
return headerView;
}
- (CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return 44.0;
}
然而,似乎永远不会调用代码。我的理解是UITableViewController
默认设置为委托,但似乎我错了。
以这种方式创建UITableViewController
(作为分层数据的一部分):
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
ProjectDetails *detailViewController = [[ProjectDetails alloc] initWithStyle:UITableViewStyleGrouped];
detailViewController.project = [listOfMetrics objectAtIndex:indexPath.row];
// Push the detail view controller.
[[self navigationController] pushViewController:detailViewController animated:YES];
[detailViewController release];
}
我应该做些什么改变才能使这个工作? 感谢。
答案 0 :(得分:11)
这个问题较旧,但我想分享我的代码。我正在使用通常的表格单元格视图来查看节标题。我用接口构建器设计了它并实现了以下委托方法。
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: @"Header"];
cell.textLabel.text = @"test";
return cell;
}
答案 1 :(得分:3)
您可以明确设置委托:
detailViewController.tableView.delegate = detailViewController;
或者您可以在控制器初始化功能中执行此操作。
编辑:您的init
方法应符合规范初始化。此外,在我看来,你还没有创建你的UITableView。尝试并使用此代码:
- (id)initWithStyle:(UITableViewStyle)style {
if ((self = [super initWithStyle:style])) {
self.tableView = [[[UITableView alloc] initWithFrame:self.view.bounds] autorelease];
self.tableView.autoresizingMask = UIViewAutoresizingFlexibleWidth UIViewAutoresizingFlexibleHeight;
self.tableView.delegate = self;
}
return self;
}
当然,您也可以在nib文件中执行所有这些操作......
答案 2 :(得分:3)
以下是使用UITableViewDelegate方法获取准系统部分视图的方法:
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
UIView *header = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, 40.0)];
header.backgroundColor = [UIColor grayColor];
UILabel *textLabel = [[UILabel alloc] initWithFrame:header.frame];
textLabel.text = @"Your Section Title";
textLabel.backgroundColor = [UIColor grayColor];
textLabel.textColor = [UIColor whiteColor];
[header addSubview:textLabel];
return header;
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return 40.0;
}
答案 3 :(得分:2)
您可以尝试这样做:在ProjectDetails.h中声明UIView *tableHeader
和访问方法- (UIView *)tableHeader;
。然后在实现文件中:
- (UIView *)tableHeader {
if (tableHeader)
return tableHeader;
tableHeader = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, 30)];
// addlabel
return tableHeader;
}
在viewDidLoad中,请致电:self.tableView.tableHeaderView = [self tableHeader];
我不相信你需要使用heightForHeaderInSection方法。