避免在viewForHeaderInSection中重绘我的节标题

时间:2014-01-03 19:25:17

标签: ios objective-c uitableview

我有一个UITableView只有1个标题,当我重新加载数据时包含标签可能会隐藏该部分标签。但是当我重新加载数据时,它们会在部分重绘,我只是想知道是否存在某种dequeueReusableCellWithIdentifier:为了避免这种情况,就像单元格一样,但是对于分支。

这是代码

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, 36)];
    /* Create custom view to display section header... */
    UILabel *labelSeq = [[UILabel alloc] initWithFrame:CGRectMake(10, 2, 30, 18)];
    [labelSeq setFont:[UIFont boldSystemFontOfSize:12]];
    labelSeq.text = @"SEQ";

    UILabel *labelSup = [[UILabel alloc] initWithFrame:CGRectMake(50, 2, 330, 18)];
    [labelSup setFont:[UIFont boldSystemFontOfSize:12]];
    labelSup.text = @"SUPPLIER";

    UILabel *labelMod = [[UILabel alloc] initWithFrame:CGRectMake(390, 2, 150, 18)];
    [labelMod setFont:[UIFont boldSystemFontOfSize:12]];
    labelMod.text = @"MODEL";

    UILabel *labelFinish = [[UILabel alloc] initWithFrame:CGRectMake(550, 2, 150, 18)];
    [labelFinish setFont:[UIFont boldSystemFontOfSize:12]];
    labelFinish.text = @"FINISH";

    UILabel *labelQty = [[UILabel alloc] initWithFrame:CGRectMake(710, 2, 30, 18)];
    [labelQty setFont:[UIFont boldSystemFontOfSize:12]];
    labelQty.text = @"QTY";

    UILabel *labelSale = [[UILabel alloc] initWithFrame:CGRectMake(750, 2, 125, 18)];
    [labelSale setFont:[UIFont boldSystemFontOfSize:12]];
    labelSale.textAlignment = UITextAlignmentRight;
    labelSale.text = @"SALE PRICE";
    labelSale.tag = 100;

    UILabel *labelCost = [[UILabel alloc] initWithFrame:CGRectMake(885, 2, 125, 18)];
    [labelCost setFont:[UIFont boldSystemFontOfSize:12]];
    labelCost.textAlignment = UITextAlignmentRight;
    labelCost.text = @"COST";
    labelCost.tag = 200;

    UILabel *labelDesc = [[UILabel alloc] initWithFrame:CGRectMake(50, 17, 700, 18)];
    [labelDesc setFont:[UIFont boldSystemFontOfSize:12]];
    labelDesc.text = @"DESCRIPTION";

    UILabel *labelUnit = [[UILabel alloc] initWithFrame:CGRectMake(750, 17, 125, 18)];
    [labelUnit setFont:[UIFont boldSystemFontOfSize:12]];
    labelUnit.textAlignment = UITextAlignmentRight;
    labelUnit.text = @"UNIT PRICE";
    labelUnit.tag = 300;

    UILabel *labelProfit = [[UILabel alloc] initWithFrame:CGRectMake(885, 17, 125, 18)];
    [labelProfit setFont:[UIFont boldSystemFontOfSize:12]];
    labelProfit.textAlignment = UITextAlignmentRight;
    labelProfit.text = @"PROFIT";
    labelUnit.tag = 400;

    [view addSubview:labelSeq];
    [view addSubview:labelSup];
    [view addSubview:labelMod];
    [view addSubview:labelFinish];
    [view addSubview:labelQty];
    [view addSubview:labelSale];
    [view addSubview:labelCost];
    [view addSubview:labelDesc];
    [view addSubview:labelUnit];
    [view addSubview:labelProfit];

    [view setBackgroundColor:[UIColor colorWithRed:0.0 green:122.0/255.0 blue:1.0 alpha:1.0]]; //your background color...
    _headerView = view;
    return view;
}

1 个答案:

答案 0 :(得分:0)

向您的班级添加一个属性以保留该UIView。然后在-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section中,检查该属性是否为零。如果它为零,则创建它并将该属性设置为它,否则只需使用属性中保存的UIView。如果它需要更新一些,那么你可以在那时做到这一点。看起来您的所有内容都是静态的,因此在您第一次创建视图后,您根本不需要更新视图。