我现在正在开发一个应用程序,需要在我的应用程序的多个场景中使用完全相同的表格视图,但是数据和表格的位置将会改变,如下面这两张图片所示(表格视图用红色突出显示)
在应用程序中的所有表格实例中,它应该具有:- 相同的委托方法
- 相同的数据源方法(尽管实际数据会更改)
- 具有相同的表格视图单元格类型,具有相同的输出口和操作。
- 相同的内部约束(我不想每次都手动添加表格单元格的约束)。
我现在正在开发一个应用程序,需要在我的应用程序的多个场景中使用完全相同的表格视图,但是数据和表格的位置将会改变,如下面这两张图片所示(表格视图用红色突出显示)
在应用程序中的所有表格实例中,它应该具有: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仓库中找到我所看到的一个基本示例。