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」ラベルが消えるアニメーションはコミットされません。行を削除する「アップルの方法」を回避する方法はありますか?

編集 - 私はそれを解決しました

それはかなり単純明快です。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 に答える