表格细胞相互渗透

时间:2011-08-01 15:23:27

标签: iphone ios xcode uitableview

我一直遇到一个我以前从未见过的表格细胞的奇怪问题。当我滚动桌子时,它们互相流血。例如,现在我在第一部分中有一个单元格显示“Device”,第二部分中有一组单元格表示“Hi”,然后是第三部分中的一些空白单元格。当我滚动时,有时“设备”被写在“Hi”之上(因此两个标签都可见但相互重叠(它们具有清晰的背景颜色),有时“Hi”会写在第三部分的单元格中。我一直在试图弄清楚什么是错的,但似乎什么都没有用。

以下是我的表视图控制器的相关部分:

- (id)initWithDeviceCoordinator:(DeviceCoordinator*)dev_con
{
    self = [super initWithStyle:UITableViewStyleGrouped];
    if (self) {
        device_coordinator = dev_con;
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 4;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Return the number of rows in the section.
    if (section == 0 || section == 3) return 1;
    else if (section == 1) return 8;
    else if (section == 2) return 2;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    if (indexPath.section == 0) cell.textLabel.text = [device_coordinator getDeviceName];
    else if (indexPath.section == 1)
    {
        if (indexPath.row == [[device_coordinator getChannelList] count])
        {
            cell.textLabel.text = @"Add new channel";
            return cell;
        }
        cell.textLabel.text = @"HI";
        return cell;
    }
    return cell;
}

该类中的所有其他函数都是默认的XCode。

2 个答案:

答案 0 :(得分:1)

您应该将cell.textLabel.text = nil设置为开头,否则当您重复使用单元格时,您会看到错误位置的文本(就像您说您看到Hi不应该出现的位置)。至于重叠标签,我认为你粘贴的代码不会导致这种情况。你在使用自定义单元吗?

答案 1 :(得分:0)

我发现了问题。就是这条线:

static NSString *CellIdentifier = @"Cell";

将其更改为固定的所有内容:

NSString *CellIdentifier = [NSString stringWithFormat:@"Cell %d_%d",indexPath.section,indexPath.row];