Я предполагаю, что у вашей таблицы есть только один раздел.Вы можете довольно легко расширить это решение на несколько разделов.
- Добавьте член NSMutableSet "selectedRows" в свой подкласс UIViewController, который управляет вашим TableView
- в
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
, чтобы переключать indexPath.row'sчленство в «selectedRows», например:
NSNumber *rowNsNum = [NSNumber numberWithUnsignedInt:indexPath.row];
if ( [self.selectedRows containsObject:rowNsNum] )
[self.selectedRows removeObject:rowNsNum];
else
[self.selectedRows addObject:rowNsNum];
- визуально указывает, что выбрана строка (например, установите для свойства accessoryType ячейки значение UITableViewCellAccessoryCheckmark) илиизмените вашу ячейку визуально другим способом, чтобы указать, что это выбранная строка
- добавьте кнопку «удалить» в ваш пользовательский интерфейс, либо в верхнем / нижнем колонтитуле раздела таблицы, в строке заголовка, где угодно, подключив кселектор с именем "deleteRows"
- в вашем методе deleteRows, итерация по набору selectedRows, создание массива indexPaths, удаление этих строк из вашей модели данных, а затем вызов (с вашим предпочтительным типом анимации):
[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];
}