Подтвердить что ты не робот

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:NOsetEditing:YES

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

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

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

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

Краткое объяснение для youtube видео: ссылка Youtube

У кого-нибудь была эта проблема?

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

Ответ 3

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