如果您想设计一次单元格,然后在不同视图控制器的不同表格视图中使用它们,您必须在单独的 .xib 文件中设计它们。原型单元是每个视图控制器,并且不能很好地扩展。
如果所有数据源和委托方法都相同,您可以将此协议的实现移至单独的类。您可以使用要显示的项目数组配置此类。
class ReusableTableView: NSObject, UITableViewDataSource, UITableViewDelegate
{
var tableView: UITableView
var tableViewData: [String]
init(_ tv: UITableView, _ data: [String])
{
tableViewData = data
tableView = tv
super.init()
tableView.delegate = self
tableView.dataSource = self
// Register all of your cells
tableView.register(UINib(nibName: "SomeNib", bundle: nil), forCellReuseIdentifier: "example-id")
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return tableViewData.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
return tableView.dequeueReusableCell(withIdentifier: "example-id", for: indexPath)
}
}
拥有这两个构建块,您可以在每个视图控制器上分别布局表格视图,并将其与可重用的数据源/委托连接起来。
class ExampleTablewViewController: UIViewController
{
@IBOutlet weak var tableView: UITableView!
var reusableTableView: ReusableTableView!
override func viewDidLoad() {
super.viewDidLoad()
reusableTableView = ReusableTableView(tableView, ["lorem", "ipsum", "dolor"])
reusableTableView.tableView.reloadData()
}
}
您可以在GitHub repo 中找到我如何看待这一点的基本示例。