3

我对删除 UITableView 中的行的概念有一个小问题。用户删除一行后,我不想触发:

    [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationRight];

相反,我想更改已编辑的单元格文本和背景而不隐藏它。我的方法效果很好:

if (editingStyle == UITableViewCellEditingStyleDelete) {
    NSMutableArray *previous_points = [self.trip_arrayOfAllPoints mutableCopy];
    [previous_points removeObjectAtIndex:indexPath.row];
    self.trip_arrayOfAllPoints = nil;

    self.trip_arrayOfAllPoints = [[NSMutableArray alloc] initWithCapacity:[previous_points count]];
    self.trip_arrayOfAllPoints = [previous_points mutableCopy];

    self.trip_arrayOfAllPointsEDITED = [[NSMutableArray alloc] initWithCapacity:[previous_points count]];
    self.trip_arrayOfAllPointsEDITED = [previous_points mutableCopy];
    //[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationRight];

    self.trip_isArrayOfAllPointsEDITED = YES;
}

但是在删除一行后,它不会在当前单元格上提交消失“DELETE”标签的动画。有没有办法绕过“Apple方式”删除行?

编辑 - 我已经解决了

这非常简单明了。只需将 deleteRowsAtIndexPaths 替换为:

    [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];

在这个“删除”动画消失并且单元格仍然在它的位置之后。

4

3 回答 3

2

你的意思是“删除”按钮会保留,即使你按下它?在我的 iOS 5.1 模拟器上按“删除”后为空:

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

“删除”按钮消失。

于 2012-07-26T09:22:12.610 回答
1

我正在使用这段代码,它工作正常

//self.selectedMessageIndex is NSIndexPath object declared in header file
//self.attachments is a NSMutableArray Object

[self.attachments removeObjectAtIndex:self.selectedMessageIndex.row];

[tblvAttachmentsList deleteRowsAtIndexPaths:[NSArray arrayWithObject:self.selectedMessageIndex]
                                  withRowAnimation:UITableViewRowAnimationLeft];
[tblvAttachmentsList reloadData];
于 2012-07-26T09:15:53.847 回答
0
self.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation:.Automatic)

这将删除带有漂亮动画的删除按钮。调用,当您知道您不会删除该行时:

func tableView(tableView: UITableView, commitEditingStyle editingStyle:UITableViewCellEditingStyle, forRowAtIndexPath indexPath:NSIndexPath) {
    if (editingStyle == UITableViewCellEditingStyle.Delete) {

        //An action happens here. If it was successful, page is refreshed
        //If the action fails, cell stays. I am showing an error and:
        self.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation:.Automatic)
    }
}
于 2016-01-27T14:00:14.893 回答