UITable UITextField无法正确显示数据SWIFT 3.0

时间:2017-02-28 20:45:13

标签: swift

我的应用程序代码相当长,所以我想尝试解决这个问题,而不必显示一堆代码....但这里是正在发生的事情..

我有一个动态单元的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)

                }
            }
        }

我希望这有帮助,谢谢

3 个答案:

答案 0 :(得分:1)

您所看到的是UITableView重用策略的症状。您可能想要做的是将您在UITextField中输入的信息存储在一个集合中,然后每次tableView"重新加载"时,您都会从该集合中选择它当前indexPath并加载它。

答案 1 :(得分:1)

这样的一条线永远不会起作用:

if cell.changeServingTextField.text == ""

问题是细胞重复使用。因此,在其前一生中,如果文本字段有文本,它仍然有文本,测试将失败。

相反,您的逻辑需要完全基于这是什么行以及与该行对应的数据。它需要涵盖每个案例,因为细胞可以重复使用。

答案 2 :(得分:0)

如果你将大部分逻辑移入细胞本身,情况会更清楚。您可以从创建所有单元格IBOutlet s fileprivate开始,并将模型对象或字典指定为单元格的属性。这样,您就可以将用于创建单元格的逻辑从显示中分离出来 - 并且会阻止您使用单元格的出口来确定状态。

虽然这可能无法直接解决您的问题,但分离逻辑可能会澄清在哪里寻找。