UITableView: могу ли я удалить несколько строк?

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

Если да, то как это сделать? Кроме того, я использую проект с одним представлением и хочу, чтобы заголовок таблицы был изменен на "Удалить" на том же самом представлении, когда пользователь хочет удалить строки из представления.

Ответы

Ответ 1

Вы можете сделать что-то таким образом:

- (void)tableView:(UITableView *)theTableView
      didSelectRowAtIndexPath:(NSIndexPath *)newIndexPath {

[theTableView deselectRowAtIndexPath:[theTableView indexPathForSelectedRow] animated:NO];
UITableViewCell *cell = [theTableView cellForRowAtIndexPath:newIndexPath];
if (cell.accessoryType == UITableViewCellAccessoryNone) {
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
    [selectedCellsMutableArray addObject:newIndexPath];
} else if (cell.accessoryType == UITableViewCellAccessoryCheckmark) {
    cell.accessoryType = UITableViewCellAccessoryNone;
    [selectedCellsMutableArray removeObjectIdenticalTo:newIndexPath];
}

}

Когда пользователь нажимает кнопку Удалить выбранные - просто вызовите что-то вроде

// change your model here and then:
[yourView deleteRowsAtIndexPaths:selectedCellsMutableArray
                withRowAnimation:UITableViewRowAnimationRight];

Ответ 2

Поздний ответ, но еще один способ справиться с этим (если вы настроите iOS 5) - переключить режим редактирования и использовать встроенный выбор нескольких ячеек. Самый простой способ сделать это - поместить это в viewDidLoad...

// add edit button to navigation bar, which auto toggles editing mode
self.navigationItem.rightBarButtonItem = self.editButtonItem;
// allows user to select multiple cells while in editing mode
self.tableView.allowsMultipleSelectionDuringEditing = YES;

Подробнее см. документацию