Проведите пальцем по "Удалить"
В моем представлении таблицы функция "Салфетка для удаления" не работает. Я применил делегат 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
Метод делегирования также необходимо реализовать для функциональной работы.