я показываю список элементов в табличном представлении. мне нужно выбрать и удалить несколько строк из таблицы за раз, любые ресурсы о том, как это сделать
выберите несколько строк из uitableview и удалите
Ответы (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
у меня возникла проблема при этом, я установил изображение ячейки для отображения, когда я выбрал ячейку для удаления, но это представление обновляется только после того, как я прокручиваю ячейку из поля зрения, а затем возвращаю ее, как я могу обновить изображение одновременно?
- person sujith1406; 10.02.2011
Вы можете принудительно перезагрузить табличное представление с помощью [tableView reloadData];. У меня были проблемы с обновлением отдельных ячеек в didSelectRowAtIndexPath (визуальные сбои), снова решаемые простым вызовом reloadData. И иногда я использую трюк, чтобы сделать отложенный вызов reloadData с помощью PerformSelector:withObject:afterDelay, иногда это единственный способ снова привести таблицу в нормальное состояние.
- person Bogatyr; 10.02.2011
спасибо, еще одна проблема, с которой я столкнулся, заключается в том, что в приведенном выше условии if else постоянно работает только часть else, пожалуйста, помогите, я зарегистрировался и проверил, есть ли значения в наборе, но первое условие не работает
- person sujith1406; 10.02.2011
Я добавил полный метод в свой ответ в редактировании, возможно, это поможет. Часть if будет вызываться только тогда, когда выбранная строка была выбрана ранее.
- person Bogatyr; 10.02.2011
@Bogatyr Итак, при вызове deleteRowsAtIndexPaths массив, который мы должны передать, в данном случае является self.selectedRows, верно?
- person iPhoneDeveloper; 16.12.2017
person
schedule
при нажатии кнопки редактирования изображение ячейки изменяется, и просто выберите несколько строк, затем нажмите кнопку удаления, и вы увидите, что все выбранные строки ячеек удалены.
- person Videh Jaiswal; 02.02.2016
Добавьте объяснение того, как это решает проблему в вашем ответе.
- person NSNoob; 02.02.2016
это просто пример сообщения с вопросом. Я показываю список элементов в табличном представлении. Мне нужно выбрать и удалить несколько строк из таблицы за раз, любые ресурсы о том, как это сделать
- person Videh Jaiswal; 02.02.2016