我在tableview中有多个部分。我对每个问题都有多个问题和多个答案。在多个答案中,我有一个选项,那就是其他选项(选项)。当我选择其他按钮时,它会显示建议的文本字段。现在我需要在tableview中滚动时保持文本字段的数据和所选选项的(其他)文本。我在下面的代码中使用了所有答案。
if (indexPath.section == 2)
{
let cellidentifier="cell3"
let cell=tableView.dequeueReusableCell(withIdentifier: cellidentifier,for:indexPath as IndexPath) as! TextfieldTableViewCell
let object_3:AnswerBaseClass = arrobject_answer[0][indexPath.row]
//print("arrobject is\(arrobject_answer[0][indexPath.row])")
if object_3.answer == "O"
{
// cell.lbl_answer.isHidden = true
cell.btn_selected.isHidden=true
//cell.lbl_answer_height.constant = 0
cell.Other_textfield.tag = 101
cell.Other_textfield.borderStyle = .line
cell.Other_textfield_top.constant = -30
cell.Height_2.constant = 30
}
else
{
cell.lbl_answer?.text = object_3.answer!
cell.Other_textfield_top.constant = 12
cell.Height_2.constant = 0
cell.lbl_answer.isHidden = false
cell.btn_selected.isHidden=false
if answer_main_data[0][indexPath.row] == true
{
cell.lbl_answer.tag = indexPath.row
cell.btn_selected.isSelected=true
if cell.lbl_answer.text == "Other"
{
for subview in cell.contentView.subviews
{
subview.removeFromSuperview()
}
if arrOtherTextfield_2.indices.contains(indexPath.row)
{
cell.addSubview(arrOtherTextfield_2[indexPath.row])
}
else
{
cell.Other_textfield.tag = 1100
cell.Other_textfield.borderStyle = .line
cell.Height_2.constant = 30
arrOtherTextfield_2.append(cell.Other_textfield)
}
}
else
{
cell.Height_2.constant = 0
}
}
else
{
cell.Other_textfield_top.constant = 12
cell.btn_selected.isSelected=false
cell.Height_2.constant = 0
}
}
cell.Other_textfield.borderStyle = .line
return cell
}
答案 0 :(得分:0)
您必须保留(存储在某些字典中)在textfield中输入的数据,否则当您滚动表格并重新加载单元格时它将丢失。如果您不想保留,则应使用滚动视图而不是表格视图。在scrollview中,即使您向上和向下滚动,它也不会重绘UI。
答案 1 :(得分:0)
您需要分离UI和数据。您将数据嵌入到单元格中,当重复使用单元格时,您丢失了数据。
你可以做两件事:
ViewModel
类,其中包含单元格数据:文本,颜色等。当然,您需要在收到输入时更新ViewModel
您可以谷歌“MVVM模式”获取更多信息。即使您的单元格被重用,您的数据在ViewModel
对象中也是安全的。Array
中,以便不会重复使用。