【问题标题】:How do I avoid using a million view controllers for tableview list?如何避免为 tableview 列表使用一百万个视图控制器?
【发布时间】:2019-06-21 17:31:48
【问题描述】:

这是我想做的一个例子。

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

【问题讨论】:

    标签: ios swift user-interface uiviewcontroller


    【解决方案1】:

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

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

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

    您的表视图控制器使用一个名为videosVideos 数组作为其数据源。

    在您的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】:

      是的,您可以只使用 2 个 vcs(列表和详细信息),通过这样做(称为 依赖注入

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

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

      模特在哪里

      struct YourModel {
        // add properties
      }
      

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

      【讨论】:

      • 我将不得不更多地研究依赖注入,但很确定这回答了我的问题!谢谢!
      猜你喜欢
      • 2017-11-05
      • 2013-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-25
      • 1970-01-01
      相关资源
      最近更新 更多