繁体   English   中英

如何避免将一百万个视图控制器用于表视图列表?

[英]How do I avoid using a million view controllers for tableview list?

这是我想做的一个例子。

您有一个带有不同视频列表的表格视图。 当您单击视频时,它将带您到详细的视图控制器(顶部的视频,下面的描述)。 现在,我目前正在创建一个全新的视图控制器,添加视频/文本,链接segue,然后创建另一个视图控制器并重新开始。 除了拥有一百万个视图控制器之外,您还不能仅使用一个视图控制器来执行此操作,并从一个快速文件中输入文本/视频吗? 我是相对较新的人,所以如果有人可以清楚地说明过程,将不胜感激。 谢谢!

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

假设您有一个这样的模型:

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

而你的表视图控制器使用的数组Video叫做videos作为其数据源。

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
}

同样的想法适用于从列表到详细信息的导航

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM