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