添加iOS UITableView HeaderView(不是节标题)

时间:2011-03-26 11:16:25

标签: iphone ios uitableview

我想在联系人应用中添加一个表头(不是节头),例如: enter image description here

完全相同 - 表格上方图像旁边的标签。

我希望所有视图都可以滚动,所以我不能把它们放在桌子之外。

我该怎么做?

5 个答案:

答案 0 :(得分:240)

UITableView具有tableHeaderView属性。将其设置为您想要的任何视图。

使用新的UIView作为容器,为新的UIView添加文字标签和图片视图,然后将tableHeaderView设置为新视图。

例如,在UITableViewController

-(void)viewDidLoad
{
     // ...
     UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(XXX, YYY, XXX, YYY)];
     UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(XXX, YYY, XXX, YYY)];
     [headerView addSubview:imageView];
     UILabel *labelView = [[UILabel alloc] initWithFrame:CGRectMake(XXX, YYY, XXX, YYY)];
     [headerView addSubview:labelView];
     self.tableView.tableHeaderView = headerView;
     [imageView release];
     [labelView release];
     [headerView release];
     // ...
} 

答案 1 :(得分:191)

您可以在Interface Builder中轻松完成。只需使用表创建一个视图,然后将另一个视图放到表中。这将成为表头视图。将标签和图像添加到该视图。有关视图层次结构,请参见下面的图片。 View Hierarchy in Interface Builder

答案 2 :(得分:12)

Swift

override func viewDidLoad() {
    super.viewDidLoad()

    // We set the table view header.
    let cellTableViewHeader = tableView.dequeueReusableCellWithIdentifier(TableViewController.tableViewHeaderCustomCellIdentifier) as! UITableViewCell
    cellTableViewHeader.frame = CGRectMake(0, 0, self.tableView.bounds.width, self.heightCache[TableViewController.tableViewHeaderCustomCellIdentifier]!)
    self.tableView.tableHeaderView = cellTableViewHeader

    // We set the table view footer, just know that it will also remove extra cells from tableview.
    let cellTableViewFooter = tableView.dequeueReusableCellWithIdentifier(TableViewController.tableViewFooterCustomCellIdentifier) as! UITableViewCell
    cellTableViewFooter.frame = CGRectMake(0, 0, self.tableView.bounds.width, self.heightCache[TableViewController.tableViewFooterCustomCellIdentifier]!)
    self.tableView.tableFooterView = cellTableViewFooter
}

答案 3 :(得分:11)

你也可以简单地在界面构建器中创建一个UIView并拖动&删除ImageView和UILabel(使其看起来像您想要的标题),然后使用它。

一旦你的UIView看起来也像你想要的那样,你可以通过编程从XIB初始化它并添加到你的UITableView。换句话说,您不必在IB中设计ENTIRE表。只是headerView(这样标题视图也可以在其他表中重用)

例如,我有一个自定义UIView用于我的一个表头。该视图由名为“CustomHeaderView”的xib文件管理,并使用我的UITableViewController子类中的以下代码将其加载到表头中:

-(UIView *) customHeaderView {
    if (!customHeaderView) {
        [[NSBundle mainBundle] loadNibNamed:@"CustomHeaderView" owner:self options:nil];
    }

    return customHeaderView;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Set the CustomerHeaderView as the tables header view 
    self.tableView.tableHeaderView = self.customHeaderView;
}

答案 4 :(得分:-31)

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

    UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0,0,tableView.frame.size.width,30)];
    headerView.backgroundColor=[[UIColor redColor]colorWithAlphaComponent:0.5f];
    headerView.layer.borderColor=[UIColor blackColor].CGColor;
    headerView.layer.borderWidth=1.0f;

    UILabel *headerLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 5,100,20)];

    headerLabel.textAlignment = NSTextAlignmentRight;
    headerLabel.text = @"LeadCode ";
    //headerLabel.textColor=[UIColor whiteColor];
    headerLabel.backgroundColor = [UIColor clearColor];


    [headerView addSubview:headerLabel];

    UILabel *headerLabel1 = [[UILabel alloc] initWithFrame:CGRectMake(60, 0, headerView.frame.size.width-120.0, headerView.frame.size.height)];

    headerLabel1.textAlignment = NSTextAlignmentRight;
    headerLabel1.text = @"LeadName";
    headerLabel.textColor=[UIColor whiteColor];
    headerLabel1.backgroundColor = [UIColor clearColor];

    [headerView addSubview:headerLabel1];

    return headerView;

}