Пользовательский UITableViewCell, UITableView и позволяет MultipleSelectionDuringEditing - PullRequest
4 голосов
/ 01 февраля 2012

У меня проблема с использованием iOS 5 новой функциональности для выбора нескольких ячеек в режиме редактирования. Структура приложения следующая:

-> UIViewController
---> UITableView
----> CustomUITableViewCell

, где UIViewController является и делегатом, и источником данных для UITableView (я использую UIViewController вместо UITableViewController по причинам, связанным с требованиями, и не могу его изменить). Ячейки загружаются в UITableView, как показано в следующем коде.

- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    CustomTableViewCell *cell = (CustomTableViewCell*)[tv dequeueReusableCellWithIdentifier:kCellTableIdentifier];
    if (cell == nil)
    {
        [[NSBundle mainBundle] loadNibNamed:@"CustomTableViewCellXib" owner:self options:nil];     
        cell = self.customTableViewCellOutlet;    
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
    }

    // configure the cell with data
    [self configureCell:cell atIndexPath:indexPath];    

    return cell;
}

Интерфейс ячейки был создан из файла XIB. В частности, я создал новый xib-файл, в котором суперпредставление состоит из элемента UITableViewCell. Чтобы обеспечить настройку, я установил тип для этого элемента как CustomUITableViewCell, где CustomUITableViewCell extends UITableViewCell.

@interface CustomTableViewCell : UITableViewCell

// do stuff here

@end

Код работает хорошо. В таблице отображаются пользовательские ячейки. Теперь во время выполнения приложения я устанавливаю allowsMultipleSelectionDuringEditing на YES и вхожу в режим редактирования для UITableView. Кажется, работает. Фактически рядом с каждой ячейкой появляется пустой круг. Проблема в том, что когда я выбираю строку, пустой круг не меняет своего состояния. Теоретически, круг должен измениться с пустой на красную галочку и наоборот. Кажется, что круг остается выше contentView для клетки.

Я провел много экспериментов. Я также проверил также этот следующий метод.

- (NSArray *)indexPathsForSelectedRows

и обновляется при выборе в режиме редактирования. Отображает правильно выбранные ячейки.

Мне не очень понятно, что когда я пытаюсь работать без пользовательской ячейки, только с UITableViewCell, круг корректно обновляет свое состояние.

У вас есть предложения? Заранее спасибо.

1 Ответ

5 голосов
/ 02 февраля 2012

Для тех, кто интересуется, я нашел правильное решение, чтобы исправить предыдущую проблему. Проблема заключается в том, что при выборе стиля UITableViewCellSelectionStyleNone красные флажки в режиме редактирования отображаются неправильно. Решение состоит в том, чтобы создать пользовательский UITableViewCell и ovverride некоторые методы. Я использую awakeFromNib, потому что моя ячейка была создана с помощью XIB. Чтобы найти решение, я следовал за этими двумя темами stackoverflow:

  1. мульти-выбор стол с видом на клеточно и-нет выбора стиля
  2. UITableViewCell-хау к предотвращать-сине-выбор-фон-ш-о-borking-IsSelected

Вот код:

- (void)awakeFromNib
{
    [super awakeFromNib];

    self.backgroundView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"row_normal"]] autorelease];
    self.selectedBackgroundView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"row_selected"]] autorelease];
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    if(selected && !self.isEditing)
    {

        return;
    }        

    [super setSelected:selected animated:animated];
}

- (void)setHighlighted: (BOOL)highlighted animated: (BOOL)animated
{
    // don't highlight
}

- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{
    [super setEditing:editing animated:animated];

}

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...