commitEditingStyle的问题 - 删除表中的单元格

时间:2011-07-28 10:46:33

标签: iphone xcode uitableview

我有一个包含该部分的节表,我想删除特定的单元格交换并删除该单元格并从表格中删除该单元格并从数组中删除。

以及删除单元格时如何设置动画。

对于下面的i代码但不起作用请帮助完成此操作。

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



    }   
}

经过更多的R& D然后我建立新的代码,并成功运行

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

2 个答案:

答案 0 :(得分:9)

首先,在从表中删除行之前,不应该Reload table。其次,在你的情况下,你想在那个部分有多个部分和多行。那么,你的

[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 :(得分:2)

你不是终止你的NSArray,这就是为什么不从你的表视图中删除该行。

以下一行:

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

实际应该是:

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

注意IndexPath之后的nil。 arrayWithObjects应该是一个nil终止的对象列表