当我滚动 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 < arrayOfNames.count
,这样您就不会访问数组之外的元素。【参考方案2】:
您的细胞被重新创建。所以你失去了他们。您可以使用 PrepareForReuse
方法在重新创建文本时将其设置回来。
【讨论】:
你能指导我多一点如何做到这一点吗?..我找不到那个方法以上是关于当我滚动 TableView 时 UItextField 数据消失了——Swift的主要内容,如果未能解决你的问题,请参考以下文章
当我滚动 TableView 时 UItextField 数据消失了——Swift
当我滚动 ScrollView 时,TableView 更改框架
当我在 iphone sdk 中滚动 tableview 时如何调用服务器?