2016-08-17 9 views
0

セル上のボタンをクリックすることで、uitableview内のセルの配列を展開して折りたたみたいと思います。私は、クリックしたセルだけでなく、後続の子セルを拡大または縮小したくない。また、配列内の項目だけを展開して折りたたみたい。Expand/Collapse UITableView内のセルの配列

現在、次のコードがありますが、セルを更新することについては何もしません。

私は間違っていますか?

- (void)reloadTableView:(UITableView *)tableView 
{ 
    NSArray *itemsArray = self.childItems; 

    NSMutableArray *insertPath = [NSMutableArray array]; 
    NSMutableArray *deletePath = [NSMutableArray array]; 

    [itemsArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
     if (![itemsArray containsObject:obj]) { 
      [insertPath addObject:[NSIndexPath indexPathForRow:idx inSection:0]]; 
     } 
    }]; 

    [itemsArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
     if ([itemsArray containsObject:obj]) { 
      [deletePath addObject:[NSIndexPath indexPathForRow:idx inSection:0]]; 
     } 
    }]; 

    if ([insertPath count] || [deletePath count]) { 
     [tableView beginUpdates]; 

     if ([deletePath count]) { 
      [tableView reloadRowsAtIndexPaths:deletePath withRowAnimation:UITableViewRowAnimationFade]; 
     } 

     if ([insertPath count]) { 
      [tableView reloadRowsAtIndexPaths:insertPath withRowAnimation:UITableViewRowAnimationFade]; 
     } 
     [tableView endUpdates]; 
    } 
    else { 
     [tableView reloadData]; 
    } 
} 

答えて

1

削除または挿入する行のみを再読み込みしています。代わりに、削除する行を削除し、挿入する行を挿入します。

[tableView beginUpdates]; 

if ([deletePath count]) { 
    [tableView deleteRowsAtIndexPaths:deletePath withRowAnimation:UITableViewRowAnimationFade]; 
} 

if ([insertPath count]) { 
    [tableView insertRowsAtIndexPaths:insertPath withRowAnimation:UITableViewRowAnimationFade]; 
} 
[tableView endUpdates]; 
+0

ありがとうございましたmaddy ...しかし、私はいつもセクションの行数が無効です。 – lifemoveson

+0

テーブルビューを更新する前に、テーブルビューのデータソースを更新する必要があります。 – rmaddy

+0

あなたはremoveObjectAtIndexを追加することを意味しますか? – lifemoveson

関連する問題