首页 > 解决方案 > 在表格视图单元格之间移动的文本

问题描述

我有一个表格视图,其中包含多个部分和每个部分中不同的行数。

我创建了一个自定义表格视图单元格。该单元格有一个标签和一个文本字段。

相同的自定义单元格用于表格视图中的每个单元格。

当我在文本字段中输入一个值时,它会出现在其他一些文本字段以及其他行中。有时文本会从我输入的文本字段中消失,并出现在下面的行中。当我上下滚动表格视图时会发生这种情况。

这是我用于 cellForRowAt 的代码

let cell = tableView.dequeueReusableCell(withIdentifier:   "LabelTextFieldTableViewCell", for: indexPath) as! LabelTextFieldTableViewCell
    for i in approachSection {
        if Int(i.row) == indexPath.row {
            cell.myLabel.text = i.name
            cell.myTextField.placeholder = cell.setPlaceholder(type: i.type!)
            if i.type != CustomFieldType.text.rawValue {
                cell.isInteger = true
            }
        }
    }
return cell

自定义单元格是

class LabelTextFieldTableViewCell: UITableViewCell, UITextFieldDelegate {

    @IBOutlet weak var myLabel: UILabel!
    @IBOutlet weak var myTextField: UITextField!

    var isInteger: Bool?
    var type: String!

    override func awakeFromNib() {
        super.awakeFromNib()
        myTextField.delegate = self
        myTextField.textAlignment = .right
        myTextField.borderStyle = .none


    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

    func setPlaceholder(type: String) -> String {
        switch type {
        case CustomFieldType.count.rawValue:
            return "#"
        case CustomFieldType.time.rawValue:
            return "Time as 1234"
        case CustomFieldType.text.rawValue:
            return "Enter Text"
        default:
            return ""
        }
    }

    func textFieldDidBeginEditing(_ textField: UITextField) {
        textField.textColor = .black
    }

    func textFieldDidEndEditing(_ textField: UITextField) {
        guard textField.text != "" else { return }

        if isInteger != nil {
            guard checkIfIntegers(str: textField.text!) != false else {
                print("Not all Integers")
                textField.textColor = .red
                return
            }
        }
    }

}

标签: iosswiftuitableviewtableview

解决方案


在您的单元子类中使用 prepareToReuse 方法。在这里,您应该将所有值重置为默认值,并在相应的 cellForRowAtIndexPath 方法中将适当的值设置为单元格。

func prepareForReuse()

苹果文档

在你的课堂上写这个方法LabelTextFieldTableViewCell我希望它会帮助你快乐编码=)


推荐阅读