如何使用不可重复使用的表格视图单元格?

Posted

技术标签:

【中文标题】如何使用不可重复使用的表格视图单元格?【英文标题】:How to use table view cells, which are not reusable? 【发布时间】:2017-11-29 15:36:02 【问题描述】:

我的问题:

动态加载玩家姓名的文本字段(输入) 基于玩家数量(之前的 ViewController) 当向下滚动到例如玩家编号7(可见单元格之外)然后之前玩家的文本输入消失并且数据丢失

tableView(cellForRowAt)中的我的单元格:

let cell = tableView.dequeueReusableCell(withIdentifier: "CellPlayer" , for: indexPath) as! TableViewCellPlayers

如何解决这个问题?我已经在 *** 上发现了一些问题,但它从未对我有用..

图 1:初始状态 图 2:填写 6 个文本输入后的状态 图 3:向下滚动 -> 文本输入 8 获取输入 1 的数据 图 4:向上滚动 -> 全部搞混了

【问题讨论】:

这是一个 XY 问题。真正的问题是您滥用单元格作为数据源。数据应该存储在一个数组(或一些模型对象)中。 好的,有道理。但是如何将该数据存储到数组中呢?每个文本输入都代表一个玩家。填写完每个输入后,用户才能与下一个 View Controller 交互。所以文本输入必须在每次输入之后存储......怎么做? 要么使用回调,要么将模型(自定义类)传递给cellForRow 中的单元格。在任何情况下,您都需要在文本字段委托方法之一中更新模型。当您导航到下一个视图控制器时,再次从模型中获取数据。 但是如何解决在文本输入中正确显示数据的问题呢?我为此添加了一些图片。 因为这是动态单元格和 MVC(模型-视图-控制器)模式的工作方式。您可以使用静态单元格,但不能在运行时更改单元格的数量(除非您在代码中执行所有操作 【参考方案1】:

一种解决方案是将写入模型中的所有内容存储起来,在 cellForRow 中,您可以使用保存的数据配置单元格。

【讨论】:

以上是关于如何使用不可重复使用的表格视图单元格?的主要内容,如果未能解决你的问题,请参考以下文章

在可重复使用的表格视图单元格中自动触摸按钮

swift,如何使表格视图单元格具有动态高度[重复]

如何使表格视图单元格中的按钮工作[重复]

如何将segue从表格视图中的单元格单击推送到另一个视图控制器[重复]

如何从一个模态视图控制器添加新的表格单元格数据?

如何使用 UIDocumentPicker 将 pdf 文件导入表格视图单元格