Tableview,如何禁用可重用单元? (用于测试目的)

Posted

技术标签:

【中文标题】Tableview,如何禁用可重用单元? (用于测试目的)【英文标题】:Tableview, how to disable reusablecell? (for testing purposes) 【发布时间】:2021-01-10 12:22:34 【问题描述】:

我目前正在使用带有可重用单元的 tableview,但我想禁用它(我知道人们不推荐这个,但我想看看性能差异)。我已尝试搜索正确的代码,但这些示例对我不起作用。

如果有人能指出我正确的方向,将不胜感激。

基本上我不希望单元格可重复使用,我希望将图像/名称存储在内存中。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
       let cell = Tableview.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! SökrutaCell


        cell.Söknamn.text = sökresultat[indexPath.row].displayname
        cell.Sökbild.image = UIImage(systemName: "eye.slash")


    return cell
    

【问题讨论】:

【参考方案1】:

如果您想存储图像和名称 - 您必须构建单独的缓存逻辑来为您执行此操作。 禁用出队绝对不是要走的路。

您将缓存保存在外部某个单独的结构中,然后从func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) 中的那个地方提取数据。

如果您真的非常想这样做 - 只需获取 UITableViewCells 的数组,而不是 dequeueReusableCell,只需手动初始化 Cells - 然后将其保存在数组中。

但是由于许多不同的原因,这是非常错误的......不要这样做 - 正确地做并在视图逻辑之外构建缓存逻辑。

【讨论】:

感谢您的回答!上面的代码是否有任何部分可以更改以使其不可重用?我想也许我可以将“dequeueReusableCell”更改为其他内容,或者它可能比这更复杂?抱歉,我是 Swift 的初学者。【参考方案2】:

要禁用单元格重用,您可以替换此行

let cell = Tableview.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! SökrutaCell

有了这个

let cell = SökrutaCell()

这将为每次请求单元格时分配一个新的单元格对象。

【讨论】:

嘿!我尝试更改代码,但在“cell.Söknamn.text = sökresultat[indexPath.row].displayname”处出现致命错误 - 在 unrwapping 可选值时意外发现 nil。我必须用某些东西替换“indexpath”吗? 此错误似乎与原始问题或我的答案无关。通常,此错误意味着您使用的是“!”运算符,你不应该这样做。 感谢您的反馈。在错误代码之前不久,我收到此代码“信息:Ferch-response 无法打开文件 /private/var/mobile..../caches, errno:2,打开缓存文件是否有问题? 对不起,这可能意味着什么。我不知道:(

以上是关于Tableview,如何禁用可重用单元? (用于测试目的)的主要内容,如果未能解决你的问题,请参考以下文章

如何在可重用的 tableView 单元格中更新 UITextfield 中的文本值,每个单元格中的值不同

在这种情况下,如何使用自定义 tableView 单元格处理可重用单元格(从代码中的其他位置更改单元格背景颜色不起作用)

如何使 UIPageViewController 像 tableview 重用单元一样重用控制器?

Tableview 单元格可重用性,切割标签文本

由于可重用性问题,tableview 单元格上的图像重复

可重用的 TableView 标题视图