0

tableViewの行を削除するときに、その上の行を選択したいと思います。これは起こりません...

コードは次のとおりです。

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // Delete the row from the data source
        if (indexPath.section == 0) {
            Formula *toDelete = (Formula *)[self.userFRMList objectAtIndex:indexPath.row];
            NSManagedObjectContext *context = (NSManagedObjectContext *)[(PSAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
            NSError *error = nil;
            [context deleteObject:toDelete];
            [context save:&error];
            [self updateDataSource];
            [tableView beginUpdates];
            [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
            if ([self.userFRMList count] != 0) {

                if (indexPath.row == 0) {
                    [self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:0  inSection:0] animated:YES scrollPosition:UITableViewScrollPositionNone];
                    self.crtFormula = [self.userFRMList objectAtIndex:0];
                    [self.delegate theFormulaIs:self.crtFormula];

                } else {
                    [self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:indexPath.row - 1  inSection:indexPath.section] animated:YES scrollPosition:UITableViewScrollPositionNone];
                    self.crtFormula = [self.userFRMList objectAtIndex:indexPath.row - 1];
                    [self.delegate theFormulaIs:self.crtFormula];

                }
            }else {
                self.crtFormula = nil;
                [self.delegate showBlank];
            }
            [tableView endUpdates];
        }

    }   

}
4

2 に答える 2

1

少なくとも、選択部分は更新ブロックの外側にある必要があります。あなたのendUpdates電話の後にそれを置いてください。

それでも問題が解決しない場合は、さらに進んでください。遅延パフォーマンスを使用して選択部分を実行してみてください(例dispatch_after)。現在、応答の途中で選択を実行しようとしていますcommitEditingStyle。まだ行を削除していません。パフォーマンスが遅れると、削除後にインターフェイスが落ち着きます。

削除の状況に応じたインデックス番号を使用する必要があります。

于 2013-03-23T17:32:46.097 に答える
0
// For example I have set deletedRowIndex to 10, and next Line will select Row Number 9 in tableview
int deletedRowIndex = 10;
[tblViewList selectRowAtIndexPath:[NSIndexPath indexPathWithIndex:deletedRowIndex-1] animated:YES scrollPosition:UITableViewScrollPositionMiddle];
于 2013-03-23T18:13:15.190 に答える