【发布时间】:2017-11-29 15:36:02
【问题描述】:
如何使用不可重复使用的表格视图单元格?
我的问题:
-
动态加载玩家姓名的文本字段(输入)
- 基于玩家数量(之前的 ViewController)
- 当向下滚动到例如玩家编号7(可见单元格之外)然后之前玩家的文本输入消失并且数据丢失
tableView(cellForRowAt)中的我的单元格:
let cell = tableView.dequeueReusableCell(withIdentifier: "CellPlayer" , for: indexPath) as! TableViewCellPlayers
如何解决这个问题?我已经在 stackoverflow 上发现了一些问题,但它从未对我有用..
- 图 1:初始状态
- 图 2:填写 6 个文本输入后的状态
- 图 3:向下滚动 -> 文本输入 8 获取输入 1 的数据
- 图 4:向上滚动 -> 全部搞混了
【问题讨论】:
-
这是一个 XY 问题。真正的问题是您滥用单元格作为数据源。数据应该存储在一个数组(或一些模型对象)中。
-
好的,有道理。但是如何将该数据存储到数组中呢?每个文本输入都代表一个玩家。填写完每个输入后,用户才能与下一个 View Controller 交互。所以文本输入必须在每次输入之后存储......怎么做?
-
要么使用回调,要么将模型(自定义类)传递给
cellForRow中的单元格。在任何情况下,您都需要在文本字段委托方法之一中更新模型。当您导航到下一个视图控制器时,再次从模型中获取数据。 -
但是如何解决在文本输入中正确显示数据的问题呢?我为此添加了一些图片。
-
因为这是动态单元格和 MVC(模型-视图-控制器)模式的工作方式。您可以使用静态单元格,但不能在运行时更改单元格的数量(除非您在代码中执行所有操作)
标签: ios swift uitableview tableview