如何避免为表视图列表使用一百万个视图控制器?
How do I avoid using a million view controllers for tableview list?
这是我想做的事的一个例子。
您有一个 table 视图,其中包含不同的视频列表。当你点击一个视频时,它会带你到一个详细的视图控制器(顶部的视频,下面的描述)。现在我正在创建一个全新的视图控制器,添加 video/text、link segue,然后创建另一个视图控制器并重新开始。不是拥有一百万个视图控制器,你不能只用一个视图控制器并从 swift 文件中输入 text/video 来做到这一点吗?我是相对较新的人,所以如果有人能清楚地解释这个过程 crystal ,我将不胜感激。谢谢!
是的,您可以仅使用 2 个 vc(列表和详细信息)来完成此操作(称为 依赖注入)
let vc = YourTableVC()
vc.arr = // set arr here
present///
class YourTableVC : UITableViewController {
var arr = [YourModel]()
}
模特所在
struct YourModel {
// add properties
}
同样的想法适用于从列表到详细信息的导航
您只需要一个 VC 即可显示您拥有的众多视频。
假设您有这样的模型:
struct Video {
let videoLink: URL
let description: String
}
并且您的 table 视图控制器使用名为 videos
的 Video
数组作为其数据源。
在您的 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"
}
然后,返回到您的 table 视图控制器,并覆盖 prepareForSegue
:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let vc = segue.destination as? VideoViewController {
vc.video = sender as! Video
}
}
这是我想做的事的一个例子。
您有一个 table 视图,其中包含不同的视频列表。当你点击一个视频时,它会带你到一个详细的视图控制器(顶部的视频,下面的描述)。现在我正在创建一个全新的视图控制器,添加 video/text、link segue,然后创建另一个视图控制器并重新开始。不是拥有一百万个视图控制器,你不能只用一个视图控制器并从 swift 文件中输入 text/video 来做到这一点吗?我是相对较新的人,所以如果有人能清楚地解释这个过程 crystal ,我将不胜感激。谢谢!
是的,您可以仅使用 2 个 vc(列表和详细信息)来完成此操作(称为 依赖注入)
let vc = YourTableVC()
vc.arr = // set arr here
present///
class YourTableVC : UITableViewController {
var arr = [YourModel]()
}
模特所在
struct YourModel {
// add properties
}
同样的想法适用于从列表到详细信息的导航
您只需要一个 VC 即可显示您拥有的众多视频。
假设您有这样的模型:
struct Video {
let videoLink: URL
let description: String
}
并且您的 table 视图控制器使用名为 videos
的 Video
数组作为其数据源。
在您的 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"
}
然后,返回到您的 table 视图控制器,并覆盖 prepareForSegue
:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let vc = segue.destination as? VideoViewController {
vc.video = sender as! Video
}
}