滚动时UITableView中的错误单元格更新

时间:2014-07-31 19:45:27

标签: ios objective-c uitableview scroll

我有一个简单的应用程序,在地图上显示公共交通工具。它具有在地图上启用/禁用显示特定传输路径的功能。它是UITableView中的列表,在每个单元格中都有一个路由名称和一个检查符号,用于显示路由是启用还是禁用。问题是当我点击列表的底部单元格(因此,出现检查符号,因此路由已启用),然后我多次向上和向下滚动列表,之后,先前点击的单元格上的检查符号消失,我不知道为什么。但是虽然检查标志消失了,但是启用了适当的路线,知道它的问题。看起来问题在于我实现tableView:cellForRowAtIndexPath:继承类的UITableViewController方法。这是:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *cellIdentifier = @"Cell";
    FilterTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
    BOOL isChecked;
    if (indexPath.section == 1) {
        cell.routeLabel.text = trollRoutes[indexPath.row]; // array of route names
        cell.directionLabel.text = trollDirections[indexPath.row]; // one more array of route names
        cell.isChecked = trollCheck[indexPath.row];
        // trollCheck is array of BOOL values, each value means if route is enabled or disabled
        cell.checkedLabel.text = cell.isChecked ? @"✓" : @"";
    }
    // same for trams, we're reading values from other arrays, it display first, and there are NO problems with it
    else if (indexPath.section == 0) {
        cell.routeLabel.text = tramRoutes[indexPath.row];
        cell.directionLabel.text = tramDirections[indexPath.row];
        cell.isChecked = tramCheck[indexPath.row];
        cell.checkedLabel.text = cell.isChecked ? @"✓" : @"";
    }
    return cell;
}

滚动表时,trollCheck数组的值不会更改。我的代码有什么问题?

0 个答案:

没有答案