TableView在删除时不select新行

当我在我的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]; } } } 

至less,select部分需要在更新块之外 ! 把它放在你的endUpdates调用之后。

如果这不起作用,请进一步:尝试使用延迟性能(例如dispatch_after )执行select部分。 现在你正在尝试执行select,而我们仍然在响应commitEditingStyle – 我们甚至还没有删除行。 延迟的性能让接口在删除后安定下来。

您将需要使用与删除的情况相对应的索引编号。

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