выберите несколько строк из uitableview и удалите

я показываю список элементов в табличном представлении. мне нужно выбрать и удалить несколько строк из таблицы за раз, любые ресурсы о том, как это сделать


person sujith1406    schedule 10.02.2011    source источник


Ответы (2)


Я предполагаю, что ваша таблица имеет только один раздел. Вы можете довольно легко распространить это решение на несколько разделов.

  • Добавьте элемент NSMutableSet "selectedRows" в свой подкласс UIViewController, который управляет вашим TableView.
  • в - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath переключите членство indexPath.row в "selectedRows", например:

NSNumber *rowNsNum = [NSNumber numberWithUnsignedInt:indexPath.row];
if ( [self.selectedRows containsObject:rowNsNum] )
    [self.selectedRows removeObject:rowNsNum];
else 
    [self.selectedRows addObject:rowNsNum];
  • визуально указать, что строка выбрана (например, установить для свойства аксессуара ячейки значение UITableViewCellAccessoryCheckmark), или визуально изменить ячейку каким-либо другим способом, чтобы указать, что это выбранная строка
  • добавьте кнопку «удалить» в свой пользовательский интерфейс, либо в верхний/нижний колонтитул раздела таблицы, в строку заголовка, где угодно, подключив к селектору под названием «deleteRows»
  • в вашем методе deleteRows выполните итерацию по набору selectedRows, создав массив indexPath, удалите эти строки из вашей модели данных, затем вызовите (с вашим предпочтительным типом анимации):

[self.myTableView deleteRowsAtIndexPaths:arrayOfIndexPathsToDelete withRowAnimation:UITableViewRowAnimationTop];    

РЕДАКТИРОВАТЬ: вот мой полный метод didSelectRowAtIndexPath. Для правильной работы может потребоваться deselectRowAtIndexPath.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
    if ( self.editing )
        return;

    [self.myTableView deselectRowAtIndexPath:indexPath animated:YES];

    NSNumber *rowNsNum = [NSNumber numberWithUnsignedInt:indexPath.row];
    if ( [self.selectedRows containsObject:rowNsNum] )
        [self.selectedRows removeObject:rowNsNum];
    else 
        [self.selectedRows addObject:rowNsNum];

    [self.myTableView performSelector:@selector(reloadData) withObject:nil afterDelay:0.2];
}
person Bogatyr    schedule 10.02.2011
comment
у меня возникла проблема при этом, я установил изображение ячейки для отображения, когда я выбрал ячейку для удаления, но это представление обновляется только после того, как я прокручиваю ячейку из поля зрения, а затем возвращаю ее, как я могу обновить изображение одновременно? - person sujith1406; 10.02.2011
comment
Вы можете принудительно перезагрузить табличное представление с помощью [tableView reloadData];. У меня были проблемы с обновлением отдельных ячеек в didSelectRowAtIndexPath (визуальные сбои), снова решаемые простым вызовом reloadData. И иногда я использую трюк, чтобы сделать отложенный вызов reloadData с помощью PerformSelector:withObject:afterDelay, иногда это единственный способ снова привести таблицу в нормальное состояние. - person Bogatyr; 10.02.2011
comment
спасибо, еще одна проблема, с которой я столкнулся, заключается в том, что в приведенном выше условии if else постоянно работает только часть else, пожалуйста, помогите, я зарегистрировался и проверил, есть ли значения в наборе, но первое условие не работает - person sujith1406; 10.02.2011
comment
Я добавил полный метод в свой ответ в редактировании, возможно, это поможет. Часть if будет вызываться только тогда, когда выбранная строка была выбрана ранее. - person Bogatyr; 10.02.2011
comment
@Bogatyr Итак, при вызове deleteRowsAtIndexPaths массив, который мы должны передать, в данном случае является self.selectedRows, верно? - person iPhoneDeveloper; 16.12.2017

person    schedule
comment
при нажатии кнопки редактирования изображение ячейки изменяется, и просто выберите несколько строк, затем нажмите кнопку удаления, и вы увидите, что все выбранные строки ячеек удалены. - person Videh Jaiswal; 02.02.2016
comment
Добавьте объяснение того, как это решает проблему в вашем ответе. - person NSNoob; 02.02.2016
comment
это просто пример сообщения с вопросом. Я показываю список элементов в табличном представлении. Мне нужно выбрать и удалить несколько строк из таблицы за раз, любые ресурсы о том, как это сделать - person Videh Jaiswal; 02.02.2016