我的应用程序代码相当长,所以我想尝试解决这个问题,而不必显示一堆代码....但这里是正在发生的事情..
我有一个动态单元的tableview都设置得很好。单元格中有一个文本字段。当数据输入文本字段时,它将被发送到同一单元格内的标签。这种情况发生在"完成"按下按钮。这一切都可以找到,直到我有大约6行添加到表中。那时,"完成"按下按钮,数据全部混淆。有时,数据会被发送到错误的单元格标签,有时则根本不会发送。这只发生在我大约6行时。我很迷茫。基于Core Data entity.count显示单元格... textfield将委托设置为自身....我不知道是什么原因造成这种情况......仅在6行之后!?
提前感谢您的帮助...就像我说的,我想尽量避免粘贴我的代码,但如果我必须提供一些我会或我可以告诉你我的代码中发生了什么...
修改
以下是我在cellForRowAt中处理单元格内容中textFields的一些代码
if searchResults.count > 1 {
if showInGrams {
if foods[indexPath.row].units != "g" && foods[indexPath.row].units != "grams" && foods[indexPath.row].units != "Grams" {
if cell.changeServingTextField.text == "" {
cell.labelServing.text = String(format: "%0.2f", (100 / foods[indexPath.row].coefficient) * searchResults[indexPath.row].doubleValue)
cell.labelUOM.text = "grams"
} else {
if cell.changeServingSegmentedControl.selectedSegmentIndex == 0 {
cell.labelServing.text = String(format: "%0.2f", Double(cell.changeServingTextField.text!)!)
cell.labelUOM.text = cell.changeServingSegmentedControl.titleForSegment(at: 0)
//show default values
} else {
cell.labelServing.text = String(format: "%0.2f", Double(cell.changeServingTextField.text!)!)
cell.labelUOM.text = cell.changeServingSegmentedControl.titleForSegment(at: 1)
}
}
} else {
if cell.changeServingTextField.text == "" {
cell.labelServing.text = String(format: "%0.2f", searchResults[indexPath.row].doubleValue * foods[indexPath.row].serving)
cell.labelUOM.text = "grams"
}
}
} else {
if cell.changeServingTextField.text == "" {
cell.labelServing.text = String(format: "%0.2f", searchResults[indexPath.row].doubleValue * foods[indexPath.row].serving)
cell.labelUOM.text = foods[indexPath.row].units
} else {
if cell.changeServingSegmentedControl.selectedSegmentIndex == 0 {
cell.labelServing.text = String(format: "%0.2f", Double(cell.changeServingTextField.text!)!)
cell.labelUOM.text = cell.changeServingSegmentedControl.titleForSegment(at: 0)
} else {
cell.labelServing.text = String(format: "%0.2f", Double(cell.changeServingTextField.text!)!)
cell.labelUOM.text = cell.changeServingSegmentedControl.titleForSegment(at: 1)
}
}
}
我希望这有帮助,谢谢
答案 0 :(得分:1)
您所看到的是UITableView
重用策略的症状。您可能想要做的是将您在UITextField
中输入的信息存储在一个集合中,然后每次tableView
"重新加载"时,您都会从该集合中选择它当前indexPath
并加载它。
答案 1 :(得分:1)
这样的一条线永远不会起作用:
if cell.changeServingTextField.text == ""
问题是细胞重复使用。因此,在其前一生中,如果文本字段有文本,它仍然有文本,测试将失败。
相反,您的逻辑需要完全基于这是什么行以及与该行对应的数据。它需要涵盖每个案例,因为细胞可以重复使用。
答案 2 :(得分:0)
如果你将大部分逻辑移入细胞本身,情况会更清楚。您可以从创建所有单元格IBOutlet
s fileprivate
开始,并将模型对象或字典指定为单元格的属性。这样,您就可以将用于创建单元格的逻辑从显示中分离出来 - 并且会阻止您使用单元格的出口来确定状态。
虽然这可能无法直接解决您的问题,但分离逻辑可能会澄清在哪里寻找。