如何避免在tableview列表中使用百万个视图控制器?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何避免在tableview列表中使用百万个视图控制器?相关的知识,希望对你有一定的参考价值。

这是我想要做的一个例子。

您有一个包含不同视频列表的表格视图。当您点击视频时,它会带您进入详细的视图控制器(顶部的视频,下面的说明)。现在我正在创建一个全新的视图控制器,添加视频/文本,链接segue,然后创建另一个视图控制器并重新开始。您不能只使用一个视图控制器并从swift文件中输入文本/视频,而不是拥有一百万个视图控制器?我是相对较新的,所以如果有人能够清楚地解释这个过程,那将非常感激。谢谢!

答案

您只需要一个VC即可显示您拥有的许多视频。

假设您有这样的模型:

struct Video {
    let videoLink: URL
    let description: String
}

并且您的表视图控制器使用称为Videovideos数组作为其数据源。

在您的didSelectRowAt方法中,您可以获取所选视频并以所选视频作为发件人执行segue:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let videoSelected = videos[indexPath.row]
    performSegue(withIdentifier: "showVideo", sender: videoSelected)
}

现在创建一个VideoViewController.swift文件并执行以下操作:

class VideoViewController: UIViewController {
    var video: Video!

    // write code for this VC to display not a specific video, but "self.video"
    // For example, instead of setting the label's text to a hardcoded description, set it to "self.video.description"
}

然后,返回到您的表视图控制器,并覆盖prepareForSegue

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let vc = segue.destination as? VideoViewController {
        vc.video = sender as! Video
    }
}
另一答案

是的,你可以用2个vcs(列表和细节)来做这个(称为依赖注入)

let vc = YourTableVC()
vc.arr = // set arr here
present///

class YourTableVC : UITableViewController {
  var arr = [YourModel]()
}

模特在哪里

struct YourModel {
  // add properties
}

同样的想法适用于从列表到细节的导航

以上是关于如何避免在tableview列表中使用百万个视图控制器?的主要内容,如果未能解决你的问题,请参考以下文章

高效地将数百万个 JSON 文件附加到单个文件中

如何在 C++ 中使用 Slot Map / Object Pool 模式管理数百万个游戏对象?

当 tableview 使用自动布局滚动时避免粘性标题视图

如何使用纯 Redis 原子地删除数百万个匹配模式的键?

自定义 Android 列表视图

数据库中的数百万行,只需要这么多