我的搜索显示视图控制器基于TableSearch。
通常,下面的表达式会给出选定的索引行:
self.tableView.indexPathForSelectedRow.row
但是在搜索模式下,可以使用以下方法获取所选行:
self.searchDisplayController.searchResultsTableView.indexPathForSelectedRow.row
我使用上面的索引在一些处理之后很快删除相应的行(来自我的后端数组) - 在didSelectRowAtIndexPath的末尾。我使用的数组是listContent和filteredListContent - 根据Apple示例。
我的问题是,在搜索模式下,我使用以下方法删除行:
[self.filteredListContent removeObjectAtIndex: self.searchDisplayController.searchResultsTableView.indexPathForSelectedRow.row]
但是,与此同时,我还想从self.listContent中删除相同的对象,因为当我返回非搜索模式时,该行不应出现。
我在搜索结果视图中看到self.tableView.indexPathForSelectedRow.row不会定期更新。相反,它在我进入搜索结果视图之前给出了最后选择的行。
当然,我可以将一些内容放入我的数组对象中,以便可以交叉引用这两个索引。但除此之外还有其他有效的解决方案吗?我认为表视图应该有这种机制。
是的,我已经在我的viewWillAppear中跟进了以下内容:
[self.tableView deselectRowAtIndexPath:self.tableView.indexPathForSelectedRow animated:YES];
答案 0 :(得分:0)
这对我来说很好......
#pragma mark - delete row
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete)
{
if(tableView == self.searchDisplayController.searchResultsTableView)
// searching mode
{
// find row (index) from listContent
arrayObject = [filteredlistContent objectAtIndex:indexPath.row];
NSUInteger fooIndex = [listContent indexOfObject: arrayObject];
NSLog(@"index listContent %u", fooIndex);
//remove from listContent
[self.listContent removeObjectAtIndex:fooIndex];
[self.tableView reloadData];
//remove from filteredlistContent
[self.filteredlistContent removeObjectAtIndex:indexPath.row];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
else // tableView mode
{
[self.listContent removeObjectAtIndex:indexPath.row];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
}
}