【发布时间】:2018-10-06 05:10:56
【问题描述】:
我已经看到了需要在加载 tableview 之前创建所有必需的重量级 UITableViewCells 的解决方案,当您的行数相对较少时,它可以工作。在这种情况下,tableviewcells 可以在调用 reloadData 之前创建,存储在一个数组中,然后在 cellForRowAt 方法中根据需要使用,而不是使用 dequeueReusableCell
let cell = tableView.dequeueReusableCell(withIdentifier: "CustCell") as! CustomCell
但是,对于我的应用程序,我无法创建所有必需的 tableview 单元格,因为它可能是 500 个或更多非常重的单元格,这会增加应用程序的内存使用量。
tableviewcells 包含一个 WKWebview,它加载包含大量 Javascript 代码的网页;加载速度不快,并且表格视图会如此快速地生成单元格,以至于它们将有效地尝试同时进行 Web 加载,因此 CPU 成本很高,可能会导致加载错误。理想情况下,tableview 的每个单元格都需要准备好按顺序使用,然后添加到 tableview 中。
我需要创建此 UITableView 需要随时可见的单元格数量(加上它预先使用的少数几个),并在用户滚动时通过 dequeueReusableCell 重用它们。
我可以使用以下方法预先创建单元格,然后在表格视图中重复使用这些单元格吗?即我可以在 cellForRowAt 方法的上下文之外使用 dequeueReusableCell 吗?
func setupCells () {
let cell = tableView.dequeueReusableCell(withIdentifier: "CustCell") as! CustomCell
cell.delegate = self
cellArray.append(cell)
}
感谢您的任何想法
【问题讨论】:
-
为什么需要预先创建任何单元格?为什么不直接使用表格视图,因为它本来就是要使用的呢?你想解决什么问题?
-
好点,我会修改原来的问题
-
我已更新问题以说明情况
-
您需要先显示单元格,并在加载 web 视图时显示进度。加载 webview 后,将其添加到单元格中。
-
Rakesha,是的,这是另一条路线 - 将加载的网络视图添加到单元格。谢谢
标签: ios swift uitableview