2013-07-12 5 views
13

Я пытаюсь заменить поведение режима редактирования по умолчанию для ячеек.UITableViewCell пользовательский вид редактирования

Я не хочу, чтобы красный круг с изображением аксессуара линии слева.

При входе в режим редактирования мне нужно, чтобы он переместил вид содержимого слева. & отобразите мою кнопку удаления.

То, что я до сих пор (пользовательские UITableViewCell) переопределяет:

-(void) setEditing:(BOOL)editing animated:(BOOL)animated 
{ 
    /* don't call super */ 
// [super setEditing:editing animated:animated]; 
    _isEditing = editing; 

    CGFloat newContentViewX = 0.0f; 
    UIColor *newDeleteButtonColor = [UIColor clearColor]; 

    if (_isEditing) 
    { 
     newContentViewX = -40.0f; 
     newDeleteButtonColor = [UIColor redColor]; 
    } 

    if (animated) 
    { 
     [UIView animateWithDuration:0.5f 
           delay:0.0f 
          options:UIViewAnimationOptionCurveEaseInOut 
         animations:^ 
     { 
      self.contentView.x = newContentViewX; //change frame.origin.x 
      _deleteButton.backgroundColor = newDeleteButtonColor; 
     } 
         completion:nil]; 
    } 
    else 
    { 
     self.contentView.x = newContentViewX; //change frame.origin.x 
     _deleteButton.backgroundColor = newDeleteButtonColor; 
    } 
} 

-(BOOL) editing 
{ 
    return _isEditing; 
} 

& это результат: setEditing:NO setEditing:YES

Приведенный выше код работает отлично! Пока он не начнет прокрутку &, содержимое содержимого будет сброшено. назад к первому изображению. Флаг редактирования не сохраняет мои изменения в кадре содержания.

Я добавил эту строку:

[cell setEditing:_tableView.isEditing animated:NO]; 

в cellForRowAtIndexPath & хотя вызов в режиме редактирования & настройки правильно мой contentview все еще находится в исходном положении & не обновленный

Short видео YouTube объясняя вопрос : Youtube link

У кого-либо еще была эта проблема?

+5

Вы должны получить +1 только для создания видео с YouTube. Очень легко понять сейчас. –

ответ

2

Ваша проблема в том, что UITableView «помогает» настроить соответствующий макет состояния с помощью ячейки, которую вы возвращаете из cellForRowAtIndexPath.

Простейший способ справиться с этим - переопределить -layoutSubviews в вашем классе ячейки.

- (void)layoutSubviews 
{ 
    if (self.editing) 
    { 
    CGRect bounds = self.bounds; 
    // do your custom layout 
    } 
    else 
    [super layoutSubviews]; 
} 

Это должно получиться в значительной степени упорядоченным.

3

Не мешайте рамке просмотра содержимого. Просто создайте свою кнопку и установите ее как editingAccessoryView, и презентация будет сделана для вас.

+0

Да, за исключением того факта, что вы по-прежнему получаете кнопки (-) круга слева, и это смещает право просмотра содержимого – Ryan

+1

В 'tableView: editingStyleForRowAtIndexPath:' return 'UITableViewCellEditingStyleNone'. Вы также можете настроить, как и когда ячейка устанавливается в режим редактирования (для удаления салфетки). – Wain

1

Похоже, что вы страдаете от побочного эффекта того, как UITableView передает сообщение setEditting своим дочерним ячейкам. Документы утверждают, что телевизор отправляет это сообщение в ячейки VISIBLE (только). Таким образом, когда новая/выделенная ячейка становится видимой, она не имела сообщения setEditting и, следовательно, имеет _editting = NO. Поэтому вам нужно проверить и установить _editting ячейки = YES в методе tableView: cellForRowAtIndexPath: тогда вы должны получить поведение прокрутки с установленной кнопкой удаления.

Смежные вопросы