向上滚动和向下滚动时,自定义表格视图单元格中UITextField的值会发生变化

时间:2017-08-15 18:49:40

标签: ios swift uitableview

我正在使用UITableviewCell在我的应用程序项目中创建配置文件表单。所以对于这个我使用单个细胞。自定义单元格由UITextField组成。最初,这些字段使用Web服务填充。

Initial form details

现在我可以编辑全名,如下所示:

enter image description here

你可以看到我在全名字段中键入了raul。

但是,如果我向上滚动表格视图并向下滚动,我会丢失更改的值,并在第一个文本字段中显示旧条目。

我使用以下代码:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    // create a new cell if needed or reuse an old one
    let regCell = profileManagement.dequeueReusableCell(withIdentifier:"regFirstCell", for: indexPath)as? RegistrationFieldTableViewCell
    regCell?.registrationField.tag = indexPath.row
    regCell?.registrationFieldImage.image = fieldImages[indexPath.row]
    let nameFields = NSLocalizedString( regFieldsNames[indexPath.row], comment: "")
    regCell?.registrationField.placeholder = nameFields
    regCell?.registrationField.autocorrectionType = .no
    regCell?.registrationField.keyboardType = UIKeyboardType.default
    regCell?.showPassword.isHidden = true
    //Swith case for giving keypad to textfields
    switch indexPath.row {
    case 0:
      regCell?.registrationField.text = self.name
    case 1:
      regCell?.registrationField.text = self.emailId
    case 2:
      regCell?.registrationField.text = self.civilId
      regCell?.registrationField.isUserInteractionEnabled = false
    case 3:
      regCell?.registrationField.text = self.phoneNumber
      regCell?.registrationField.isUserInteractionEnabled = false
    case 4:
      regCell?.registrationField.isSecureTextEntry = true
      regCell?.registrationField.text = "abhijith123"
      regCell?.showPassword.isHidden = true
      regCell?.registrationField.isUserInteractionEnabled = false
    default:
      print("Something else")
    }
    return regCell!
}

2 个答案:

答案 0 :(得分:3)

这是由于细胞可重用性。

您需要保存更改,以便在下次查看单元格时将其更改。目前您正在做的是更改文本,轻扫(重复使用单元格)。然后向后滑动(单元格重新加载了cellForRowAt函数,因此设置了它的值)

您需要做的是实际存储用户插入的值,以便当用户滚动然后再返回时,我们会显示保存的值。

为此,请将您的值存储在数组中,然后存储在yourlabel.text = yourArray[indexPath.row]

假设您有一个包含3行的tableview,每行都有一个textview。

1-定义一个数组:valuesArray = ["", "", ""]

在cellAtIndex函数中设置textField.tag = indexPath.row

在cellAtIndex函数中设置textField.text = valuesArray[indexPath.row]

4-在你为textField完成了EndEditing Delegate,设置:valuesArray[textField.tag] = textField.text

这应该有效

希望这有帮助!

答案 1 :(得分:1)

想一想。每次我们看到第0行,你都会说:

  regCell?.registrationField.text = self.name

但您永远不会 self.name更改为用户在该字段中输入的内容。因此,当我们再次显示第0行时,它会自动恢复为旧的self.name