Существует также метод -setEditing:animated:
для UITableViewCell.Поэтому, если вы переопределяете его в пользовательском UITableViewCell и отправляете сообщение супер, только если оно доступно для редактирования, вы можете достичь того, чего хотите.
Чтобы быть более понятным. Подкласс UITableViewCell и поддерживать логическое значение в нем, говорят:
@interface CustomTableViewCell : UITableViewCell
{
BOOL cellEditable;
}
@property (readwrite, assign) BOOL cellEditable;
@end
Далее в вашем Tableview метод делегата, возвращает объект CustomTabeViewCell с cellEditable свойство надлежащим образом установить для строки (будь то редактируется эта строка или нет).
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
CustomTableViewCell *newCell = [[CustomTableViewCell alloc] init];
if (row_is_editable)
[newCell setCellEditable:YES];
else
[newCell setCellEditable:NO];
return [newCell autorelease];
}
Согласно документации - (void)setEditing:(BOOL)editing animated:(BOOL)animated
метода UITableViewCell в -
«При вызове этого метода со значением редактирования набора к YES, и объект UITableViewCell сконфигурирован, чтобы иметь контроль, ячейка показывает вставку (зеленый плюс) или управление удалением (красный минус) в левой части каждой ячейки и управление переупорядочением с правой стороны. Этот метод вызывается для каждой видимой ячейки, когда вызывается метод setEditing: анимированный: UITableView. Вызов этого метода с редактированием, установленным в NO, удаляет элементы управления из ячейки ».
Так все, что нужно сделать, это переопределить -setEditing: анимированные: метод в нашем CustomTableViewCell и выполнить это:
-(void)setEditing:(BOOL)editing animated:(BOOL)animated
{
if ([self cellEditable])
{
[super setEditing:editing
animated:animated];
}
else
{
[super setEditing:NO
animated:NO];
}
}
И вы сделали, теперь, когда вы вызываете -setEditing:animated:
на ваш взгляд таблицы, только строки, ячейки которых вы устанавливаете как cellEditable, будут доступны для редактирования.
@ Джордан, спасибо, это та же самая идея, что и у меня, но она создает раздражающее мерцание, когда таблица переходит в режим редактирования, и это не очень естественно. Я думаю, что OP должен внедрить салфетки для удаления, как утверждает Ян Генри или придерживается более стандартного подхода. – DyingCactus
Вы также можете использовать анимацию, но я согласен. – Jordan
Спасибо, Джордан, похоже, работает. :) – msk