当section为空时,UITableView背景颜色变为白色

时间:2009-12-12 18:22:05

标签: iphone uitableview

这是交易:我有一个UITableView有2个部分,我想在第一部分为空时显示“无数据”单元格,这样2个部分的标题不会粘在一起(因为它看起来很奇怪)

效果很好(尽管我最初无法使其工作,see this thread)。我正在使用viewForFooterInSection:

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {

if(section == 0)
{
        if([firstSectionArray count] == 0)
                return 40;
        else 
                return 0;
}

return 0;

}

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

    if(section == 0)
    {
        UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(200, 10, 50, 44)];
        label.backgroundColor = [UIColor clearColor];
        label.textColor = [UIColor colorWithWhite:0.6 alpha:1.0];
        label.textAlignment = UITextAlignmentCenter;
        label.lineBreakMode = UILineBreakModeWordWrap; 
        label.numberOfLines = 0;
        label.text = @"No row";
        return [label autorelease];
    }

    return nil;
}

但是当我显示部分页脚视图时,背景颜色变为纯白色。见图:

alt text http://img683.yfrog.com/img683/9480/uitableviewproblem.png

当背景充满空单元格时,我更喜欢它。有谁知道怎么做?感谢

1 个答案:

答案 0 :(得分:2)

当没有页脚时,背景将填充空单元格。因此,不要实现viewForFooterInSection(或titleForFooterInSection)方法,您将获得“空单元格”效果。

我建议您返回一个单元格,表示没有要显示的条目,如下所示:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (matches.count>0) {
        // Do your usual thing here
    } else {
        static NSString *cellId = @"noDataCell";
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
        if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId] autorelease];
            cell.textLabel.textAlignment = UITextAlignmentCenter;
            cell.textLabel.textColor = [UIColor grayColor];
        }
        cell.textLabel.text = @"Aucun match";
        return cell;
    }
}

当然,您必须告诉UIKit您的部分中至少有一个单元格...我已经添加了isDeletingRow案例,这似乎给您带来麻烦(在评论中)。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    if (section==0) return matches.count>0 ? matches.count : (isDeletingRow ? 0 : 1);
    // Set 'isDeletingRow' to YES when a delete is being committed to the table, in that case we let UIKit know that we indeed took care of the delete...
    // And cover the other sections too...
}

当您提交修改时,您需要为isDeletingRow设置numberOfRowsInSection以返回令人满意的值...

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        isDeletingRow = YES;
        // Your current code when a row is deleted here...
        isDeletingRow = NO;
        if (matches.count==0) [self.tableView performSelector:@selector(reloadData) withObject:nil afterDelay:0.5];
    }
}