Проведите пальцем по "Удалить"

В моем представлении таблицы функция "Салфетка для удаления" не работает. Я применил делегат commitEditingStyle и кнопку "Редактировать" на панели навигации. Следовательно, когда пользователь нажимает кнопку редактирования, кнопки удаления и добавления отображаются соответствующим образом. Однако при прокрутке кнопка удаления не появляется и кажется, что она не распознает салфетки как вызов метода setEditing.

Затем я реализовал делегаты willBeginEditingRowAtIndexPath и didEndEditingRwoAtIndexPath следующим образом:

-(void)tableView:(UITableView*)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath

{
 NSLog(@"WILL BEGIN EDITING");

 [self.tableView setEditing:YES animated:YES];

}


-(void)tableView:(UITableView*)tableView didEndEditingRowAtIndexPath:(NSIndexPath *)indexPath

{

[self.tableView setEditing:NO animated:YES];

}

Однако это тоже не имеет никакого эффекта. Какая может быть проблема? Я включил multi-touch для представления таблицы в IB, и каждая ячейка оснащена аксессуаром DetailDisclosureButton.

Ответ 1

Для использования функции "перетащить-удалить" вы должны реализовать

 -(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete)
        ; // Delete.
}

EDIT: Я недостаточно хорошо читал вопрос.

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

Ответ 2

Я делал следующее в таблицеView: editStyleForRowAtIndexPath: метод делегирования: -

if (self.editing == NO || !indexPath)
{   
    return UITableViewCellEditingStyleNone;
}

Предполагалось, что стиль редактирования не будет изменен, если не был выбран indexPath. По какой-то причине всякий раз, когда выполнялось действие салфетки, это конкретное условие выполнялось. При комментировании приведенного выше фрагмента кода удаленное действие для удаления было нормально.

Спасибо всем за вашу помощь.

Ответ 3

Вам необходимо реализовать:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath;


- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath;

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath;

С этими тремя вещами вам должно быть хорошо идти. (Я пропустил commitEditingStyle, и он никогда не работал.

Ответ 4

Если все остальные советы не помогут проверить, есть ли у вас в вашем коде распознаватель жестов. Это не сработает, если у вас есть что-то вроде этого в некотором подклассе.

Ответ 5

Ключ, чтобы заставить его работать, - реализовать:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath;

И не забудьте поставить его внутри UITableViewDataSource "вместо UITableViewDelegate"

Ответ 6

Вы реализовали метод tableView:editingStyleForRowAtIndexPath: и вернули его UITableViewCellEditingStyleDelete

Ответ 7

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath Метод делегирования также необходимо реализовать для функциональной работы.