选中searchResultsTableView中的行

时间:2012-11-12 21:35:52

标签: ios uisearchdisplaycontroller

我有一个tableView谁的数据源是一个包含400个静态项的数组。在我的应用程序中,您可以选择一行,它将在该行上打勾。我正在跟踪另一个数组中已检查项目的indexPaths,以便以后可以重新加载该表,并且仍然会检查这些项目。

由于我的表中有很多值,我添加了一个searchDisplayController。开始输入您要查找的内容,它会将列表过滤到这些项目。您可以在searchResultsTableView中选择行,它将检查它们,就像在具有400个静态行的主表中一样。但是,有一个问题:

假设您输入搜索并将400个项目的列表缩小到您要查找的项目,然后选择(选中)它。在400个项目的完整列表中,您刚搜索的项目可能是列表中的数字112,但是当您进行搜索并过滤到只有那一项时,而不是将项目112的indexPath添加到我的数组中跟踪,它输入了项目0的indexPath,因为它是筛选列表中显示的唯一项目。 因此,当您取消搜索并返回主列表而不是项目112上的复选标记时,项目0上有一个复选标记。

所以我正在寻找一种方法来保持我的过滤数组与我的主tableView数据源同步。

我的didSelectRowAtIndexPath方法的相关位:

if (tableView == self.searchDisplayController.searchResultsTableView) {
    cell.textLabel.text = [filteredattributesArray objectAtIndex:[indexPath row]];
    if(cell.accessoryType == UITableViewCellAccessoryNone){ 
        cell.accessoryType = UITableViewCellAccessoryCheckmark;

        [selectedItemRows addObject:indexPath]; //Add the index path of checked cell into     array to keep track            

        [tableView reloadData];

    } else {
        if(cell.accessoryType == UITableViewCellAccessoryCheckmark) {
            cell.accessoryType = UITableViewCellAccessoryNone;

            [selectedItemRows removeObject:indexPath]; //Remove that index path of unchecked cell from index array

            [tableView reloadData];
        }
    }
    [tableView deselectRowAtIndexPath:indexPath animated:YES];        }
}

1 个答案:

答案 0 :(得分:0)

不要使用indexPath。在数据数组中的每个项目上设置标记值,然后为“checkedArray”保留标记列表。这样,您可以独立于单元格或tableView结构评估已检查的项目。