我正在使用UITableviewCell
在我的应用程序项目中创建配置文件表单。所以对于这个我使用单个细胞。自定义单元格由UITextField
组成。最初,这些字段使用Web服务填充。
现在我可以编辑全名,如下所示:
你可以看到我在全名字段中键入了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!
}
答案 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
。