我通常UITableView
使用自定义单元格,UISearchBar
我可以使用searchBar:textDidChange方法来过滤行。但是我想添加到我的项目中的是能够删除过滤后的行,这些行将从原始DataSourseArray
中删除
我该如何实现?
问问题
365 次
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];
删除所有并告诉tableView
to 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 回答