Как получить выбранную строку из UITableView с помощью контроллера отображения поиска

У меня есть контроллер представления отображения поиска, основанный на 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 не обновляется регулярно при просмотре результатов поиска. Вместо этого он дает последнюю выбранную строку перед входом в представление результатов поиска.

Конечно, я могу поместить некоторый контент в свои объекты массива, чтобы можно было ссылаться на оба индекса. Но есть ли какое-либо эффективное решение, кроме этого? Я думаю, что табличный вид должен иметь этот механизм.

И да, я уже делаю следующее на мой взглядWillAppear:

   [self.tableView deselectRowAtIndexPath:self.tableView.indexPathForSelectedRow animated:YES];

person Nirav Bhatt    schedule 02.11.2012    source источник


Ответы (1)


Это работает нормально для меня...

 #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];
        }
    }
}
person TonyMkenu    schedule 05.11.2012