22

如何(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section在 iOS7 风格的(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section作品上实现?

PS我只需要更改标题标题的颜色UITableView并保存它的样式。

4

6 回答 6

52

您可以在使用 willDisplayHeaderView 进行渲染之前更改标准 tableview 标头内的标签颜色。也适用于 iOS6/iOS7。

- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section
{
    if([view isKindOfClass:[UITableViewHeaderFooterView class]]){

        UITableViewHeaderFooterView *tableViewHeaderFooterView = (UITableViewHeaderFooterView *) view;
        tableViewHeaderFooterView.textLabel.textColor = [UIColor blueColor];
    }
}

以供参考

UITableViewHeaderFooterViewhttps ://developer.apple.com/documentation/uikit/uitableviewheaderfooterview

UITableViewDelegate 协议https ://developer.apple.com/documentation/uikit/uitableviewdelegate/1614905-tableview

于 2013-09-22T22:12:55.773 回答
8

如果您需要更改页眉和页脚的全局颜色,请使用appearance

[[UILabel appearanceWhenContainedIn:[UITableViewHeaderFooterView class], nil] setTextColor:[UIColor redColor]];
于 2013-10-24T15:45:22.770 回答
6

在视图控制器生命周期的早期(例如,-viewDidLoad),注册类:

 [[self tableView] registerClass:[UITableViewHeaderFooterView class] forHeaderFooterViewReuseIdentifier:@"headerFooterReuseIdentifier"];

然后,在您的方法中:(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)sectiondeque 一个单元格,按照您的意愿设置它的样式,然后返回它:

 UIColor *titleColor = ... // Your color here.
 UITableViewHeaderFooterView *headerFoorterView = [[self tableView] dequeueReusableHeaderFooterViewWithIdentifier:@"headerFooterReuseIdentifier"];
 [[headerFooterView textLabel] setTextColor:titleColor];
 return headerFooterView;

这就是您使用默认实现的方式。

于 2013-09-15T22:07:18.963 回答
3

不完美但解决方案:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    UILabel *label = [[UILabel alloc] init];
    label.textColor = [UIColor whiteColor];
    label.backgroundColor = [UIColor clearColor];
    if (<is_iOS7>) {
        label.text = [[NSString stringWithFormat:@"  %@", <title>] uppercaseString];
    } else {
        if (<is_iPad>) {
            label.text = [NSString stringWithFormat:@"          %@", <title>];
        } else {
            label.text = [NSString stringWithFormat:@"  %@", <title>];
        }
    }
    return label;
}

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    return 38.f;
}
于 2013-09-15T22:02:44.307 回答
1

而@aumansoftware 的回答也是将内容添加到标准标题(例如按钮)中的最佳方式。这是 Swift 中的一个示例:

override func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
    if (view.isKindOfClass(UITableViewHeaderFooterView)) {
        let headerView = view as UITableViewHeaderFooterView

        // Label
        headerView.textLabel.textColor = UIColor.blueColor()

        // New Button
        let addPeopleButton: UIButton = UIButton.buttonWithType(.ContactAdd) as UIButton
        addPeopleButton.addTarget(self, action: "showPeoplePicker:", forControlEvents: UIControlEvents.TouchUpInside)

        addPeopleButton.setTranslatesAutoresizingMaskIntoConstraints(false)
        headerView.addSubview(addPeopleButton)
        let right: NSLayoutConstraint = NSLayoutConstraint(item: addPeopleButton, attribute: NSLayoutAttribute.Right, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.Right, multiplier: 1.0, constant: -12)
        let vertical: NSLayoutConstraint = NSLayoutConstraint(item: addPeopleButton, attribute: NSLayoutAttribute.CenterY, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.CenterY, multiplier: 1.0, constant: 0)
        headerView.addConstraints([right, vertical])
    }
}
于 2014-09-28T13:47:59.703 回答
0

它的工作方式与 iOS 6 完全相同。创建一个视图(或只是一个覆盖整个标题的标签)并根据您的要求对其进行样式设置。

于 2013-09-15T21:56:01.997 回答