0

我通常UITableView使用自定义单元格,UISearchBar我可以使用searchBar:textDidChange方法来过滤行。但是我想添加到我的项目中的是能够删除过滤后的行,这些行将从原始DataSourseArray
中删除 我该如何实现?

4

3 回答 3

0

如果您有搜索栏,则必须根据过滤器是否为空来过滤数据。单独保存过滤数据和完整集合很方便:

@property (strong, nonatomic) NSMutableArray* allTableData;
@property (strong, nonatomic) NSMutableArray* filteredTableData;

根据是否定义过滤器,您将需要返回差异细胞计数

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:  (NSInteger)section
{
    int rowCount;
    if(self.isFiltered)
        rowCount = filteredTableData.count;
    else
        rowCount = allTableData.count;

    return rowCount;
}

与返回单元格相同。如果有过滤器 - 您必须使用索引 aginst 过滤数据

- (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];

    Food* food;
    if(isFiltered)
        food = [filteredTableData objectAtIndex:indexPath.row];
    else
        food = [allTableData objectAtIndex:indexPath.row];

    // ... Set up the cell here...;

    return cell;
}

这是关于过滤 UITableView的教程

于 2013-06-03T12:08:38.610 回答
0

你可以做的是[aryAll removeObjectsInArray:aryFilter];删除所有并告诉tableViewto reloadData

或删除单个,添加

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if( editingStyle == UITableViewCellEditingStyleDelete )
    {
        NSObject *obj = [aryFilter objectAtIndex:indexPath.row];
        [aryFilter removeObject:obj];
        [aryAll removeObject:obj];

        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
    }
}

例如 ;)

没有在我的代码中尝试过,但是你需要这样的东西:)

于 2013-06-03T12:35:36.290 回答
0

根据您所说,您使用的是 2 个不同的数组。一个用于完整数据,一个用于过滤数据。使用单个数组,这可以轻松实现

换句话说。当您过滤时将对象添加到过滤后的数组中,然后从数据源数组中删除所有对象并从过滤后的数组中添加并使用 reloaddata 显示它。

于 2013-06-03T12:57:56.067 回答