TableBuilder
更轻松地编写TableView页面
优点
- 代码更少
- 声明式
- 灵活
- 基于UITableViewDelegate和UITableViewDataSource
- 已处理重用功能
- 易于重写和扩展
示例
要运行示例项目,请克隆仓库,并首先从Example目录中运行`pod install`命令。
要求
Swift 5+
安装
TableBuilder可以通过CocoaPods获取。要安装它,只需将以下行添加到您的Podfile中
pod 'TableBuilder'
使用方法
import TableBuilder
class ViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
var tableProxy: TableProxy!
override func viewDidLoad() {
super.viewDidLoad()
reloadTable()
}
var show: Bool = true
func reloadTable() {
// bind the builder
tableProxy = tableView.bd.build(TableBuilder {
for _ in 0..<3 {
// create a TableViewSection
TableSectionBuilder {
// create a TableViewRow
TableRowBuilder(
cellHeight: 50,
cellType: TableViewCell1.self, reuseType: .nib)
{ tableView, indexPath, cell in
} didSelectRowAtIndexPath: { tableView, indexPath, cell in
print("CellType1的单独的点击事件")
}
TableRowBuilder(
cellHeight: 50,
cellType: TableViewCell2.self, reuseType: .anyClass)
{ tableView, indexPath, cell in
cell.contentView.backgroundColor = .green
cell.textLabel?.text = "\(indexPath.row)"
} didSelectRowAtIndexPath: { tableView, indexPath, cell in
print("=====Cell类型2的单独的点击事件")
}
let count = 10
for _ in 0..<count {
TableRowBuilder(
cellHeight: 30,
autoCellHeight: false,
cellType: UITableViewCell.self,
reuseType: .anyClass)
{ tableView, indexPath, cell in
cell.contentView.backgroundColor = .blue
cell.textLabel?.text = "\(indexPath.row)"
}
}
if show {
TableRowBuilder(
cellHeight: 50,
cellType: UITableViewCell.self)
{ tableView, indexPath, cell in
cell.contentView.backgroundColor = .purple
cell.textLabel?.text = "\(indexPath.row)"
}
TableRowBuilder(
cellHeight: 50,
cellType: UITableViewCell.self)
{ tableView, indexPath, cell in
cell.contentView.backgroundColor = .purple
cell.textLabel?.text = "\(indexPath.row)"
}
}
else {
TableRowBuilder(
cellHeight: 90,
cellType: UITableViewCell.self)
{ tableView, indexPath, cell in
cell.contentView.backgroundColor = .yellow
cell.textLabel?.text = "\(indexPath.row)"
}
}
}
}
})
tableProxy.didSelectRowAtIndexPath = { tableView, indexPath in
print("clicked: \(indexPath.section) - \(indexPath.row)")
}
tableView.reloadData()
}
}
作者
chenbo, [email protected]
许可
TableBuilder遵循MIT许可。有关更多信息,请参阅LICENSE文件。