Shoyu 是一个用 Swift 编写的库,用于表示 UITableView 数据结构。
Shoyu 在日语中意为酱油。
使用 createSection
和 createRow
。
tableView.source = Source() { source in
// Create section
source.createSection { section in
// Create row
section.createRow { row in
// Setting reuse identifier
row.reuseIdentifier = "Cell"
// Setting fixed height.
row.height = 52
// Configuring handler for cell.
row.configureCell = { cell, _ in
cell.textLabel?.text = "row 1"
}
}
}
}
如果 Storyboard 中指定的 ClassName
和 ReuseIdentifier
相同,则无需指定 reuseIdentifier。
使用 createRows
。
let members = [
Member(firstName: "John", lastName: "Paterson"),
Member(firstName: "Matt", lastName: "Gray"),
Member(firstName: "Jennifer", lastName: "Hart"),
Member(firstName: "Katherine", lastName: "Nash"),
Member(firstName: "Diane", lastName: "Nash"),
]
tableView.source = Source() { source in
source.createSection { section in
section.createRows(members) { member, row in
row.height = 52
row.configureCell = { cell, _ in
cell.textLabel?.text = member.fullName
}
}
}
}
使用 createHeader
和 createFooter
。
tableView.source = Source() { source in
source.createSection { section in
// Create header.
section.createHeader { header in
// Setting title.
header.title = "Header"
header.height = 22
header.configureView = { view, _ in
view.backgroundColor = UIColor.lightGrayColor()
}
}
// Create footer.
section.createFooter { footer in
...
}
}
}
Section
和 Row
与泛型兼容。
public class Section<HeaderType: UIView, FooterType: UIView>: SectionType {
...
}
public class Row<CellType: UITableViewCell>: RowType {
...
}
在 configureCell
的参数中的 cell
是泛型中指定的类型。分区头和分区脚注也是类似的。
// Create generic row.
section.createRows(members) { (member, row: Row<MemberTableViewCell>) in
row.configureCell = { cell, _ in
// cell type is MemberTableViewCell.
cell.nameLabel.text = member.fullName
}
}
Row
有一些代理方法。
section.createRow { row in
// Configuring handler for height.
row.heightFor = { _ -> CGFloat? in
return 52
}
// Configuring handler for cell.
row.configureCell = { cell, _ in
cell.textLabel?.text = "row"
}
// Event handler for when cell is selected.
row.didSelect = { _ in
print("row is selected.")
}
}
Shoyu 在 MIT 许可下发布。有关详细信息,请参阅 LICENSE。