2008-12-11 5 views
13

Мне любопытно, можно ли перехватить методы по умолчанию режима «Редактировать» в UITableView. Как правило, вы получаете бесплатную кнопку «удалить», если вы проведите по экрану UITableViewCell, у которого есть связанные с ним методы делегирования. Я хотел бы изменить удаление на какой-то другой произвольный селектор. Вместо того, чтобы удалять ячейку, я просто хотел бы запустить приветственный диалог с миром. Есть что-то по возможности?UITableView, перехват режима редактирования

ответ

3

В UITableViewCell есть свойство, называемое editAction, которое документировано как позволяющее вам изменить действие, используемое для вставки или удаления на отдельные ячейки (оно также использует свойство ячейки target). Я не тестировал его, но похоже, что он может делать то, что вы хотите.

+3

Эта функция устарела с iOS 3.0. – 2011-10-08 16:40:26

0

Я бы выполнил подкласс UITableViewCell и обработал события касания там. Вам, скорее всего, придется самому заниматься анимацией, но я думаю, что это, наверное, самое простое решение. Существует не «поддерживаемый» метод для изменения кнопки удаления, я не думаю, что

21

Редактирование реализовано как метод объекта-объекта UITableView. В контроллере таблицы, есть то, что управление активирует редактирования вызова этого:

[tableView setEditing: YES animated: YES]; 

Затем убедитесь, что ваш объект делегат реализует это:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (editingStyle == UITableViewCellEditingStyleDelete) { 
      UIAlertView *alert = [[UIAlertView alloc] 
       initWithTitle: @"Delete" 
       message: @"Do you really want to delete “George W. Bush”?" 
       delegate: self 
       cancelButtonTitle: @"Cancel" 
       otherButtonTitles: @"Of course!", nil]; 
    } 
} 

... или более стандартное действие может быть:

[itemList removeObjectAtIndex:indexPath.row]; 
[table deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:YES]; 
+1

Проблема заключается в том, что делать, когда пользователь нажимает «отменить». Единственное, что я сделал, это выглядит наполовину - `reloadRowsAtIndexPaths`, чтобы избавиться от кнопки удаления. – 2010-07-28 02:41:02

6

@JFMartin и Marco - для замены стандартной кнопки «Удалить» используйте следующий метод делегата UITableview

- (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath 
Смежные вопросы