无法访问未显示在屏幕上的 uitableview 部分中的单元格

Posted

技术标签:

【中文标题】无法访问未显示在屏幕上的 uitableview 部分中的单元格【英文标题】:Can not access cells on uitableview's sections which not displaying on screen 【发布时间】:2016-02-22 12:21:27 【问题描述】:

我在使用 dequeueReusableCellWithIdentifier 时遇到问题

我有一个包含多个部分的表格视图。所有部分都有动态行,所有行都有一些表单字段。最后部分的行数根据其他部分的表单字段增加或减少。

我正在使用以下代码访问最后一节的单元格:

        let indexPath = NSIndexPath(forRow: remarkCount, inSection: clsections.count )
        let cell = tableView.cellForRowAtIndexPath(indexPath) as! remarkCell!

这个示例 tableview 是否有 10 个部分。

问题是;

如果第 10 节在 iPad 的屏幕上可见(只需向下滚动到 tableview 的底部),单元格将被创建为!备注细胞!否则单元格将为零。

在使用 cellForRowAtIndexPath 之前,我应该以编程方式滚动到 tableview 的底部吗?或者是否有任何替代方法可以在不重新使用单元格的情况下 dequeueReusableCellWithIdentifier ?

谢谢。

【问题讨论】:

表格视图单元格只是对数据的视图。您不应该依赖它们来存储数据;为此使用诸如数组之类的数据模型。无法检索不在屏幕上的单元格。 感谢@Paulw11,但 tableview 是一种表单,并且这些动态单元格上有用户输入。我正在尝试读取这些值。 您需要将该数据存储到某个数据模型中;一旦这些单元格滚动出视图,它们就会被重复使用,并且数据将丢失。我建议您将单元格上的委托设置回视图控制器,并在文本更改时让您的单元格调用委托方法,以便您可以存储文本以便在单元格再次显示时恢复它 【参考方案1】:

CellForRowAtIndexPath 将在需要时自动调用(当单元格即将可见时)。 当您使用 dequeueReusableCellWithIdentifier 时,它会尽可能“回收”现有单元格,否则会创建一个新单元格

【讨论】:

嗨@Roee84 有没有不回收现有细胞的方法? 让 cell = UITableViewCell(UITableViewCellStyle.UITableViewCellStyleDefault, reuseIdentifier: nil) 只需将 nil 作为重用标识符传递

以上是关于无法访问未显示在屏幕上的 uitableview 部分中的单元格的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 单元格未显示放置在自定义单元格上的 UITableView(KPDropDown)

无法用带有约束的 UITableView 填充屏幕

UITableView 页脚未显示

向下滚动 uitableview 时,UIView 无法正确显示

iOS 可访问性无法识别屏幕上的任何内容

UITableView 单元格在首次加载时未显示