Существует метод -setEditing:animated:
также для UITableViewCell. Поэтому, если вы переопределите его в пользовательском UITableViewCell и отправите сообщение super, только если оно доступно для редактирования, вы сможете достичь того, чего хотите.
Чтобы быть более понятным. Подкласс 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: animated: метод UITableView. Вызов этого метода с редактированием, установленным на NO, удаляет элементы управления из ячейки. "
Так что все, что нам нужно сделать, это переопределить -setEditing: animated: метод в нашем 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, будут доступны для редактирования.