2011-07-28 7 views
3

セクションを含むセクションテーブルが1つあり、perticularセルスワップを削除してこのセルを削除し、そのセルをテーブルから削除して配列からも削除します。commitEditingStyleの問題 - テーブル内のセルを削除する

どのようにアニメーションするときに、セルを削除します。

以下のコードでは動作していませんが、これを行うにはお役立てください。はるかR & D後

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { 

    if (editingStyle == UITableViewCellEditingStyleDelete) { 
     // Delete the row from the data source 
     [self.reports removeObjectAtIndex:indexPath.row]; 
     [tbl reloadData]; 
      [tbl deleteRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath] 
            withRowAnimation:UITableViewRowAnimationFade];  



    } 
} 

それから私は、新しいコードを構築し、これに成功あなたのNSArrayのを終了nilをされないと、なぜそれがある

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { 


if (editingStyle == UITableViewCellEditingStyleDelete) { 
    // Delete the row from the data source 

    [[[self.reports objectAtIndex:indexPath.section] valueForKey:@"events"] removeObjectAtIndex:indexPath.row]; 
    [tbl deleteRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:indexPath.row inSection:indexPath.section]] withRowAnimation:UITableViewRowAnimationLeft]; 

[NSTimer scheduledTimerWithTimeInterval: 0.1 target: self selector: @selector(tableReload) userInfo: nil repeats: NO]; 
} 

}

-(void)tableReload{ 
    [tbl reloadData]; } 
+0

あなたの 'cellForRowAtIndexPath:'メソッドを共有できますか? –

+0

私はカスタムセルを作成し、それはテーブルに入れます –

+0

私はちょうどあなたが正しい配列オブジェクトを削除しているかどうかを確認するために、セルにテキストを割り当てる方法を見てみたかった。あなたはsectioned tableviewを指摘しました。つまり、indexpathの行とセクションの両方をチェクする必要がありますが、行だけをチェックしていました。とにかく、うまい問題が今解決された良い –

答えて

9

まず、テーブルから行を削除する前にReload tableを使用しないでください。第2に、あなたの場合、そのセクションには複数のセクションと複数の行があります。したがって、あなたの

[tbl deleteRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath] 
            withRowAnimation:UITableViewRowAnimationFade]; 

は機能しません。
オブジェクトを配列から削除すると機能します。テーブルから行を削除する必要はありません。ちょうどリロードテーブル:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { 

    if (editingStyle == UITableViewCellEditingStyleDelete) { 
     // Delete the row from the data source 
     [self.reports removeObjectAtIndex:indexPath.row]; 
     [tbl reloadData]; 
} 

しかし、正しいindexNumberを入れていることに注意してください。

+1

- (ボイド)のtableView:(のUITableView *)のtableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { (editingStyle == UITableViewCellEditingStyleDelete)であれば{ \t \t [[[self.reports objectAtIndex: indexPath.sec] valueForKey:@ "イベント"] removeObjectAtIndex:indexPath.row];\t \t [tbl deleteRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:indexPath.row inSection:indexPath.section]] withRowAnimation:UITableViewRowAnimationLeft]; } –

2

を実行しています行がテーブルビューから削除されていません。

次の行:

[tbl deleteRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath] 
           withRowAnimation:UITableViewRowAnimationFade]; 

は実際にあるべき:

[tbl deleteRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] 
           withRowAnimation:UITableViewRowAnimationFade]; 

お知らせIndexPath後にはnil。 arrayWithObjectsは、オブジェクトの無制限終了リストである必要があります

+0

R&Dのいくつかの並べ替えの後、正常に実行されるコードの下に開発する。 –

+1

- (ボイド)のtableView:(のUITableView *)のtableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { 場合(editingStyle == UITableViewCellEditingStyleDelete){ \t \t [[[self.reports objectAtIndex:indexPath.section ] valueForKey:@ "イベント"] removeObjectAtIndex:indexPath.row];\t \t [tbl deleteRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:indexPath.row inSection:indexPath。セクション]] withRowAnimation:UITableViewRowAnimationLeft]; } –

関連する問題