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

问题描述:

我的应用程序代码相当长,所以我想尝试解决这个问题,而不必显示一堆代码....但这里是怎么回事。UITable UITextField无法正确显示数据SWIFT 3.0

我有一个tableview动态单元格设置都很好。单元格中有一个文本框。当数据输入到文本字段中时,它将被发送到同一单元格内的标签。这发生在按下“完成”按钮时。这一切都可以找到,直到我有大约6行添加到表中。此时,按下“完成”按钮时,数据全部混合起来。有时数据被发送到错误的单元标签,而其他时间则根本不发送。这只发生在约6行时。我很困扰。这些单元格是基于Core Data entity.count显示的...... textfield将代理设置为自己......我不知道可能是什么原因导致这个......只有6行!?

预先感谢您的帮助......就像我说的,我想尽量避免在此粘贴我的代码,但如果我必须提供一些我或者我可以跟你通过什么是怎么回事我代码...

编辑

下面是我的一些代码cellForRowAt,在单元格内容

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) 

       } 
      } 
     } 

我希望THI与文本框交易s帮助,谢谢

+1

听起来好像你正试图使用​​单元格来存储数据,并被它们缓存和重用的事实所捕获。一般来说,不要对“cellForRow ...”方法以外的单元格内容执行任何操作,并将该方法中保存的数据完全配置为**。 –

+1

请发布与问题相关的代码。找出问题发生的最小代码量也可能帮助您深入了解根本原因。删除与手头问题无关的任何属性。继续下去,直到你有最低限度的代码显示问题。您可能会发现自己创建一个新的临时项目用于调查此问题很有用。 –

+0

感谢您的回复。我所有的代码基本上都在cellForRow方法内部......在单元格内使用这些textField非常重要,因为根据它们是否保留空白或不存在,发生了很多... – Bill

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

+0

这可以工作。我如何将数据放入基于indexPath的某种集合中,仍然可以将其加载到正确的单元格中以供使用? – Bill

+0

完美。我能够根据我输入信息的textField的indexPath将键值对存储在字典中。我检索它,但使用一点点字符串技巧在indexPath上调用if语句...没有更多的问题。感谢您的建议! – Bill

像这样的线路从来没有去上班:

if cell.changeServingTextField.text == "" 

的问题是,电池是重用。因此,在以前的生活中,如果文本字段有文本,它仍然有文本,测试将失败。

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

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

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