【问题标题】:UItextField data disappears when I scroll through the TableView -- Swift当我滚动 TableView 时 UItextField 数据消失了——Swift
【发布时间】:2017-01-17 21:14:28
【问题描述】:

我的应用出现问题。我有一个表格视图,其中每个单元格都包含一个文本字段。当我在其中写入并向下滚动时,而不是向上滚动,我在其中写入的数据消失了。

这些是我在 ViewController 中的一些功能

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, UITextFieldDelegate, UIScrollViewDelegate {

    var arrayOfNames : [String] = [String]()
    var rowBeingEdited : Int? = nil

    public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return initialNumberOfRows
    }

    var count: Int = 0;
    public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell: TableViewCell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! TableViewCell



        if(arrayOfNames.count > 0 && count < arrayOfNames.count) {
            cell.TextField.text = self.arrayOfNames[indexPath.row]
        }else{
            cell.TextField.text = ""
        }

    count += 1



        cell.TextField.tag = indexPath.row
        cell.TextField.delegate = self
        return cell
    }

func textFieldDidEndEditing(_ textField: UITextField) {
    let row = textField.tag
    if row >= arrayOfNames.count {
        for _ in ((arrayOfNames.count)..<row+1) {
            arrayOfNames.append("") // this adds blank rows in case the user skips rows
        }
    }

    arrayOfNames[row] = textField.text!
    rowBeingEdited = nil

}

func textFieldDidBeginEditing(_ textField: UITextField) {
    rowBeingEdited = textField.tag
}
}

如您所见,我将文本字段中的所有书面文本保存到一个数组中。任何帮助,将不胜感激。

提前致谢

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    当您向上滚动时,tableView(tableView: cellForRowAt:) 会再次被调用。在该方法中,每次调用时都会增加计数,因此它不是使用第一个条件,而是转到将cell.TextField.text = "" 设置为计数可能大于arrayOfNames.count 的第二个条件语句。你用count 做什么?也许重新考虑如何更好地编写这部分代码。

    【讨论】:

    • 计数会增加,因为尝试访问数组中的元素时会出现跳出错误
    • 改为indexPath.row &lt; arrayOfNames.count,这样您就不会访问数组之外​​的元素。
    【解决方案2】:

    您的细胞被重新创建。所以你失去了他们。您可以使用 PrepareForReuse 方法在重新创建文本时将其设置回来。

    【讨论】:

    • 你能指导我多一点如何做到这一点吗?..我找不到那个方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-27
    • 2017-05-02
    • 2020-06-27
    • 1970-01-01
    相关资源
    最近更新 更多