滚动后iOS UITableView Cell加载不正确?

时间:2011-09-30 18:58:52

标签: ios uitableview scroll cell

我在视图中有2个UITableView,我只在第2个表第5行和第7行添加了UITableViewCellAccessoryDisclosureIndicator。

但是在向下滚动第二个表(第1行消失)然后滚动回到顶部(第1行出现)之后,第1行现在有了UITableViewCellAccessoryDisclosureIndicator ?!第1行以某种方式成为第5行或第7行???下面是我的cellForRowAtIndexPath代码:

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

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

    cell.textLabel.textColor = [UIColor blueColor];
    cell.detailTextLabel.textColor = [UIColor blackColor];
    if (tableView == table1)
    {
        cell.textLabel.text = [title1 objectAtIndex:indexPath.row];
        cell.detailTextLabel.text = [list1 objectAtIndex:indexPath.row];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
    }
    else if (tableView == table2)
    {
        cell.textLabel.text = [title2 objectAtIndex:indexPath.row];
        cell.detailTextLabel.text = [list2 objectAtIndex:indexPath.row];
        if (indexPath.row == 5 || indexPath.row == 7)
        {
            cell.selectionStyle = UITableViewCellSelectionStyleBlue;
            cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
        }
        else
        {
            cell.selectionStyle = UITableViewCellSelectionStyleNone;
        }
    }
    return cell;
}

非常感谢!

1 个答案:

答案 0 :(得分:2)

重用UITableViewCells以优化性能。这种情况发生在[tableView dequeueReusableCellWithIdentifier:CellIdentifier];您需要在每次调用tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 时明确设置您希望在单元格上显示的任何属性。

这样的事情可以解决问题:

if (indexPath.row == 5 || indexPath.row == 7)
        {
            cell.selectionStyle = UITableViewCellSelectionStyleBlue;
            cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
        }
        else
        {
            cell.selectionStyle = UITableViewCellSelectionStyleNone;
            cell.accessoryType = UITableViewCellAccessoryNone;
        }