2012-02-01 2 views
4

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

-> 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 распространяется UITableViewCell.

@interface CustomTableViewCell : UITableViewCell 

// do stuff here 

@end 

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

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

- (NSArray *)indexPathsForSelectedRows 

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

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

Есть ли у вас какие-либо предложения? Заранее спасибо.

ответ

4

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

  1. multi-select-table-view-cell-and-no-selection-style
  2. uitableviewcell-how-to-prevent-blue-selection-background-w-o-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]; 

} 

Надеется, что это помогает.