自定义UITableView标题部分

我想为每个部分定制UITableView标题。 到目前为止,我已经实施

 -(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 

这个UITabelViewDelegate方法。 我想要做的是获得每个部分的当前标题,并添加UILabel作为子视图。

到目前为止,我无法做到这一点。 因为,我找不到任何东西来获取默认的节标题。 第一个问题, 有什么办法可以得到默认的节头

如果这是不可能的,我需要创build一个UIView的容器视图,但是这次我需要设置默认的背景颜色,阴影颜色等。因为,如果仔细查看部分的标题,它已经定制。

我怎样才能得到每个部分头的这些默认值?

谢谢你们。

你可以试试这个:

  -(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, 18)]; /* Create custom view to display section header... */ UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 5, tableView.frame.size.width, 18)]; [label setFont:[UIFont boldSystemFontOfSize:12]]; NSString *string =[list objectAtIndex:section]; /* Section header is in 0th index... */ [label setText:string]; [view addSubview:label]; [view setBackgroundColor:[UIColor colorWithRed:166/255.0 green:177/255.0 blue:186/255.0 alpha:1.0]]; //your background color... return view; } 

所选答案使用tableView :viewForHeaderInSection:是正确的。

只是在这里分享一个小费。

如果使用storyboard / xib,则可以创build另一个原型单元格,并将其用于“分区单元格”。 configuration标题的代码与您为行单元格configuration的方式类似。

 - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { static NSString *HeaderCellIdentifier = @"Header"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:HeaderCellIdentifier]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:HeaderCellIdentifier]; } // Configure the cell title etc [self configureHeaderCell:cell inSection:section]; return cell; } 

Lochana Tejas的快速版本回答:

 override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { let view = UIView(frame: CGRectMake(0, 0, tableView.frame.size.width, 18)) let label = UILabel(frame: CGRectMake(10, 5, tableView.frame.size.width, 18)) label.font = UIFont.systemFontOfSize(14) label.text = list.objectAtIndex(indexPath.row) as! String view.addSubview(label) view.backgroundColor = UIColor.grayColor() // Set your background color return view } 

如果您使用默认标题视图,则只能使用它更改文本

 - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 

对于Swift:

 override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 

如果你想自定义视图,你需要创build一个新的自己。

为什么不使用UITableViewHeaderFooterView ?

如果headerInSection不显示,可以试试这个。

 - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { return 45; } 

这将返回给定部分的标题的高度。

尝试这个……

 override func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) { // Background view is at index 0, content view at index 1 if let bgView = view.subviews[0] as? UIView { // do your stuff } view.layer.borderColor = UIColor.magentaColor().CGColor view.layer.borderWidth = 1 } 
 -(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { //put your values, this is part of my code UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 30.0f)]; [view setBackgroundColor:[UIColor redColor]]; UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(20, 5, 150, 20)]; [lbl setFont:[UIFont systemFontOfSize:18]]; [lbl setTextColor:[UIColor blueColor]]; [view addSubview:lbl]; [lbl setText:[NSString stringWithFormat:@"Section: %ld",(long)section]]; return view; } 

如果我是你,我会做一个方法,返回一个UIView给定一个NSString来包含。 例如

 + (UIView *) sectionViewWithTitle:(NSString *)title; 

在这个方法的实现中,创build一个UIView,使用你想要设置的属性添加一个UILabel,当然也可以将它的标题设置为给定的属性。

在swift中奇妙地添加Table View Header

最近我尝试了这个。

我需要在整个UITableView中只有一个头。

就像我想在桌面上的UIImageView。 所以我在UITableViewCell的顶部添加了一个UIImageView,并自动添加了一个tableViewHeader。 现在我将Im​​ageView连接到ViewController并添加了Image。

我很困惑,因为我第一次做了这样的事情。 所以为了清除我的困惑,打开MainStoryBoard的xml格式,发现Image View被添加为标题。

它为我工作。 感谢xCode和Swift。

在斯威夫特@ samwize的解决scheme(所以upvote他!)。 辉煌使用相同的回收机制也用于页眉/页脚部分:

 func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { let settingsHeaderSectionCell:SettingsHeaderSectionCell = self.dequeueReusableCell(withIdentifier: "SettingsHeaderSectionCell") as! SettingsHeaderSectionCell return settingsHeaderSectionCell } 

这是最简单的解决scheme。 以下代码可以直接用于创build自定义节标题。

  -(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { SectionHeaderTableViewCell *headerView = [tableView dequeueReusableCellWithIdentifier:@"sectionHeader"]; //For creating a drop menu of rows from the section //==THIS IS JUST AN EXAMPLE. YOU CAN REMOVE THIS IF-ELSE.== if (![self.sectionCollapsedArray[section] boolValue]) { headerView.imageView.image = [UIImage imageNamed:@"up_icon"]; } else { headerView.imageView.image = [UIImage imageNamed:@"drop_icon"]; } //For button action inside the custom cell headerView.dropButton.tag = section; [headerView.dropButton addTarget:self action:@selector(sectionTapped:) forControlEvents:UIControlEventTouchUpInside]; //For removing long touch gestures. for (UIGestureRecognizer *recognizer in headerView.contentView.gestureRecognizers) { [headerView.contentView removeGestureRecognizer:recognizer]; [headerView removeGestureRecognizer:recognizer]; } return headerView.contentView; } 

注意:SectionHeaderTableViewCell是在Storyboard中创build的自定义UITableViewCell。

swift 3版本的lochana和estemendoza的答案:

 override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { let view = UIView(frame: CGRect(x:0, y:0, width:tableView.frame.size.width, height:18)) let label = UILabel(frame: CGRect(x:10, y:5, width:tableView.frame.size.width, height:18)) label.font = UIFont.systemFont(ofSize: 14) label.text = "This is a test"; view.addSubview(label); view.backgroundColor = UIColor.gray; return view } 

另外,请注意,您还必须执行:

 override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { return 100; } 

除了titleForHeaderInSection,你可以简单地改变页眉,页脚的视图。 检查我的评论在这里: 更改UITable部分backgroundColor没有松动部分标题

如果你只是想添加标题到tableView头不添加视图。 在swift 3.x代码是这样的:

 override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { var lblStr = "" if section == 0 { lblStr = "Some String 1" } else if section == 1{ lblStr = "Some String 2" } else{ lblStr = "Some String 3" } return lblStr } 

您可以实现一个数组来获取标题的标题。

回到原来的问题(4年后),而不是重build自己的部分头,iOS可以简单地调用你(使用willDisplayHeaderView:forSection :)后,它的默认构build。 例如,我想在节标题的右边添加一个graphicsbutton:

 - (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section { UITableViewHeaderFooterView * header = (UITableViewHeaderFooterView *) view; if (header.contentView.subviews.count > 0) return; //in case of reuse CGFloat rightEdge = CGRectGetMaxX(header.contentView.bounds); UIButton * button = [[UIButton alloc] initWithFrame:CGRectMake(rightEdge - 44, 0, 44, CGRectGetMaxY(header.contentView.bounds))]; [button setBackgroundImage:[UIImage imageNamed:@"graphIcon"] forState:UIControlStateNormal]; [button addTarget:self action:@selector(graphButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; [view addSubview:button]; } 

其他的答案做了很好的重新创build默认的标题视图,但不实际回答你的主要问题:

有没有什么办法获得默认节头?

有一种方法 – 只是在你的委托中实现tableView:willDisplayHeaderView:forSection: 默认的标题视图将会被传递到第二个参数中,然后你可以把它转换成一个UITableViewHeaderFooterView ,然后根据需要添加/改变子视图。

 - (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section { UITableViewHeaderFooterView *headerView = (UITableViewHeaderFooterView *)view; // Do whatever with the header view... } 
 - (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section { if([view isKindOfClass:[UITableViewHeaderFooterView class]]){ UITableViewHeaderFooterView *headerView = view; [[headerView textLabel] setTextColor:[UIColor colorWithHexString:@"666666"]]; [[headerView textLabel] setFont:[UIFont fontWithName:@"fontname" size:10]]; } } 

如果要更改节标题中的textLabel的字体,您可以在willDisplayHeaderView中执行此操作。 要设置文本,你可以在viewForHeaderInSection或titleForHeaderInSection中做到这一点。 祝你好运!

调用这个委托方法

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

这将有机会自动添加一个默认的标题与dynamic标题。

您可以使用可重用和可定制的页眉/页脚。

https://github.com/sourov2008/UITableViewCustomHeaderFooterSection

使用tableView: willDisplayHeaderView:定制即将显示的视图。

这使您能够获取已经为标题视图创build的视图并对其进行扩展,而不必自己重新创build整个标题视图。

以下是一个基于BOOL的标题部分的颜色示例,并将一个详细文本元素添加到标题。

 - (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section { // view.tintColor = [UIColor colorWithWhite:0.825 alpha:1.0]; // gray // view.tintColor = [UIColor colorWithRed:0.825 green:0.725 blue:0.725 alpha:1.0]; // reddish // view.tintColor = [UIColor colorWithRed:0.925 green:0.725 blue:0.725 alpha:1.0]; // pink // Conditionally tint the header view BOOL isMyThingOnOrOff = [self isMyThingOnOrOff]; if (isMyThingOnOrOff) { view.tintColor = [UIColor colorWithRed:0.725 green:0.925 blue:0.725 alpha:1.0]; } else { view.tintColor = [UIColor colorWithRed:0.925 green:0.725 blue:0.725 alpha:1.0]; } /* Add a detail text label (which has its own view to the section header… */ CGFloat xOrigin = 100; // arbitrary CGFloat hInset = 20; UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(xOrigin + hInset, 5, tableView.frame.size.width - xOrigin - (hInset * 2), 22)]; label.textAlignment = NSTextAlignmentRight; [label setFont:[UIFont fontWithName:@"Helvetica-Bold" size:14.0] label.text = @"Hi. I'm the detail text"; [view addSubview:label]; }