2012-02-01 12 views
4

iOS 5編集モードで複数のセルを選択するという新機能が問題です。 アプリケーション構造は以下の通り:カスタムUITableViewCell、UITableViewとallowsMultipleSelectionDuringEditing

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

UIViewControllerはデリゲートとUITableViewのデータソース(私は要求の理由で代わりUITableViewControllerUIViewControllerを使用していると私はそれを変更できない)の両方です。セルは、次のコードのように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ファイルから作成されています。特に、スーパービューがUITableViewCell要素で構成されている新しいxibファイルを作成しました。カスタマイズを行うために、その要素のタイプをCustomUITableViewCellと設定しました。ここではCustomUITableViewCellUITableViewCellになります。

@interface CustomTableViewCell : UITableViewCell 

// do stuff here 

@end 

コードはうまくいきます。テーブルでは、カスタムセルが表示されます。今、アプリケーションの実行中にallowsMultipleSelectionDuringEditingYESに設定し、UITableViewの編集モードに入ります。それは働いているようだ。実際には、各セルの横に空の円が表示されます。問題は、行を選択すると、空の円はその状態を変えないということです。理論的には、円は空のチェックマークと赤のチェックマークとその逆に変化しなければならない。円は細胞のcontentViewの上に残っているようです。

私は多くの実験を行いました。私はまた、以下の方法もチェックしました。

- (NSArray *)indexPathsForSelectedRows 

編集モードで選択中に更新されます。選択された右のセルが表示されます。

私にはっきりしないことは、カスタムセルなしで作業しようとすると、UITableViewCellのみで円が正しく状態を更新するということです。

ご意見はありますか?前もって感謝します。

答えて

4

興味のある方は、前の問題を解決する有効な解決策を見つけました。 選択スタイルがUITableViewCellSelectionStyleNoneの場合、編集モードで赤のチェックマークが正しく表示されないという問題があります。解決方法は、カスタムを作成することです。UITableViewCellおよびいくつかのメソッドをオーバーライドします。私はawakeFromNibを使用しています。私のセルはxibを通して作成されているからです。ここでは、コード

  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]; 

} 

はそれが役に立てば幸い私は、これら2つのstackoverflowの話題を追ってきた解に到達するには。

関連する問題