【问题标题】: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

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

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

【问题讨论】:

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

标签: ios swift uitableview tableview


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-05-26
    • 1970-01-01
    • 2019-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多