当我滚动 TableView 时 UItextField 数据消失了——Swift

Posted

技术标签:

【中文标题】当我滚动 TableView 时 UItextField 数据消失了——Swift【英文标题】:UItextField data disappears when I scroll through the TableView -- 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


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

提前致谢

【问题讨论】:

【参考方案1】:

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

【讨论】:

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

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

【讨论】:

你能指导我多一点如何做到这一点吗?..我找不到那个方法

以上是关于当我滚动 TableView 时 UItextField 数据消失了——Swift的主要内容,如果未能解决你的问题,请参考以下文章

当我滚动时,TableView 只加载一个单元格的内容

当我滚动 TableView 时 UItextField 数据消失了——Swift

当我滚动 ScrollView 时,TableView 更改框架

当我在 iphone sdk 中滚动 tableview 时如何调用服务器?

当我滚动 tableView 时,我怎么知道哪个单元格触摸了绿色区域

在 ScrollView 中滚动 TableView