Вид аксессуара редактирования отображается, когда ячейка входит в режим редактирования.На самом деле это кажется слишком сложным, чтобы на самом деле заставить это работать, но я справился с этим:
Чтобы показать это как при входе в режим редактирования всей таблицы, так и при перелистывании отдельной строки, у меня естьВ моем подклассе UITableViewController реализовано следующее:
- (void)setEditing:(BOOL)editing animated:(BOOL)animated {
if (editing)
self.editingFromEditButton = YES;
[super setEditing:(BOOL)editing animated:(BOOL)animated];
self.editingFromEditButton = NO;
// Other code you may want at this point...
}
editingFromEditButton
- это свойство BOOL подкласса.Этот метод вызывается при нажатии стандартной кнопки «Редактировать».Он используется в следующем методе, который предотвращает отображение стандартной кнопки удаления:
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (self.editingFromEditButton)
return UITableViewCellEditingStyleNone;
// Otherwise, we are at swipe to delete
[[tableView cellForRowAtIndexPath:indexPath] setEditing:YES animated:YES];
return UITableViewCellEditingStyleNone;
}
Если для представления всей таблицы установлен режим редактирования, то каждой ячейке также будет отправлено сообщение setEditing.Если мы прокрутили одну строку, нам нужно перевести эту ячейку в режим редактирования, а затем вернуть стиль UITableViewCellEditingStyleNone
, чтобы предотвратить появление стандартной кнопки удаления.
Затем, чтобы закрыть пользовательский аксессуар для редактирования, вам также понадобится следующий код:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// Cancel the delete button if we are in swipe to edit mode
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
if (cell.editing && !self.editing)
{
[cell setEditing:NO animated:YES];
return;
}
// Your standard code for when the row really is selected...
}