更新:我已经解决了这个问题,方法是重新标记剩余的单元格,方法是在 for 循环中循环遍历它们,每次将 indexpath 的行递增到剩余的数据量。
我有一个包含 2 个部分的 UITableView。一节是固定的。另一部分动态变化,用户单击按钮并添加新行。这些单元格包含三个用户可以编辑的文本框(标记为 1、2 和 3)。此部分中的行是可编辑的,用户可以滑动和删除。所有这些功能目前都运行良好。这是用户界面:
当我尝试更新数据源时,无法正常工作。我使用一个数组,其中包含一个名为“ReceiptItem”的自定义类的对象。当用户在单元格中编辑其中一个 UITextField 时,我正在更新“ReceiptItem”中的相应属性。我目前正在使用标签来跟踪正在编辑的单元格和文本字段。
我识别正在编辑的单元格和文本字段的代码是:
- (void)textFieldDidEndEditing:(UITextField *)textField{
//find the cell and textfield that just ended editing
int row = textField.superview.tag;
int column = textField.tag;
ReceiptItem *itemToBeUpdated = [[ReceiptItem alloc]init];
itemToBeUpdated = [receiptItemsArray objectAtIndex:row];
//update the receiptItem
switch (column) {
case 1:
//quantity text field
itemToBeUpdated.quantityValue = [textField.text doubleValue];
break;
case 2:
//item text field
if ([textField text].length == 0) {
itemToBeUpdated.itemName = @"Blank";
}
else{
itemToBeUpdated.itemName = [textField text];
}
break;
case 3:
//price text field
itemToBeUpdated.priceValue = [textField.text doubleValue];
break;
}
[receiptItemsArray replaceObjectAtIndex:row withObject:itemToBeUpdated];
}
我遇到问题的地方是当一行被删除时。我从我的数据源中删除了相应的对象,我的数组计数减一。如果我随后尝试在已删除单元格下方的单元格中编辑文本字段,则会收到“outofbounds”错误,因为该单元格的标记现在大于数组的计数。它发生在这一行(从上面):
itemToBeUpdated = [receiptItemsArray objectAtIndex:row];
我试图弄清楚如何a)更好地跟踪单元格,b)在删除单元格时重新标记单元格或c)其他内容。有什么答案吗?如果需要,我可以在我的单元格被删除的地方发布代码。