在运行应用程序时编辑单元格时更新数组
Posted
技术标签:
【中文标题】在运行应用程序时编辑单元格时更新数组【英文标题】:Update array while editing cell while running the App 【发布时间】:2015-09-19 15:07:37 【问题描述】:我在 ViewController 中有一个 tableView
和一个名为 toDo
的数组,在 TableView 中我有一个单元格,在单元格中我有 textView。
textView 是可编辑的(用户可以更改 textView 中的文本)。
用户更改文本后 - 我希望单元格将其保存到 toDo 数组,但每当我重新加载数据时,文本就会消失。
这是我尝试过的:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
let cell: TableViewCell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath:indexPath) as! TableViewCell
cell.textField.text = toDo[indexPath.row]
cell.textField.delegate = self
return cell
**我有一个测试按钮,只要我点击它就会重新加载数据。
【问题讨论】:
请显示您正在使用修改后的文本更新 toDo 的代码。 代码在问题中:cell.textField.text = toDo[indexPath.row]
。除非我没有编写正确的代码..
这显示了你如何从 toDo 读取信息,但重要的部分是当用户更新文本时你如何写入 toDo 信息。有意义吗?
@MirekE 我想我没有写它。你能给我一个例子吗?
【参考方案1】:
试试这个 - 在文本字段上设置标签并实现 textFieldDidEndEditing:
以在重新加载表格视图之前更新您的模型。
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
let cell: TableViewCell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath:indexPath) as! TableViewCell
cell.textField.text = toDo[indexPath.row]
cell.textField.tag = indexPath.row
cell.textField.delegate = self
return cell
func textFieldDidEndEditing(textField: UITextField)
toDo[textField.tag] = textField.text
【讨论】:
当我将textField
更改为 textView
时,它起作用了。谢谢!【参考方案2】:
我认为问题在于,每当系统需要重新渲染单元格时,都会调用方法func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath)
;这发生在您的文本视图有机会将其内容保存在数据模型中之前。在您的情况下,每次按下按钮。我假设您使用可选的func textFieldDidEndEditing(_ textField: UITextField)
委托方法保存文本字段的内容。您可以在此类方法中添加println("SAVING")
,在 tableView(...) 方法中添加println("RE-RENDERING CELL")
,然后查看事件顺序。不确定这是否有帮助,但我会尝试。
【讨论】:
“保存”方法中的内容是什么? 好的,所以你可能不保存。看看 Abhianav 的新答案:巧妙地使用标签,它应该可以工作。我建议将 println("SAVING") 放在 textFieldDidEndEditing(_ textField: UITextField) 委托方法中,以查看它是否被调用以及何时调用。以上是关于在运行应用程序时编辑单元格时更新数组的主要内容,如果未能解决你的问题,请参考以下文章
编辑单元格时如何在 QTableView 中使用 Enter 键导航