无法访问未显示在屏幕上的 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)