Shoyu
Shoyu is a library written in Swift to represent UITableView data structures.
Shoyu means Soy Sauce in Japanese.
Usage
Create single section and single row
Use createSection
and 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"
}
}
}
}
if ClassName
and ReuseIdentifier
specified in Storyboard are the same, you don't need to specify the reuseIdentifier.
Create rows for corresponds to the array
Use createRows
.
let members = [
Member(firstName: "Hamada", lastName: "Hiro"),
Member(firstName: "Hamada", lastName: "Tadashi"),
Member(firstName: "Tamago", lastName: "GoGo"),
Member(firstName: "", lastName: "Wasabi"),
Member(firstName: "Lemon", lastName: "Honey"),
Member(firstName: "", lastName: "Fred"),
]
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
}
}
}
}
Create section header and section footer
Use createHeader
and createFooter
.
tableView.source = Source() { source in
source.createSection { section in
// Create header.
section.createHeader { header in
// Setting title.
header.title = "Big Hero 6"
header.height = 22
header.configureView = { view, _ in
view.backgroundColor = UIColor.lightGrayColor()
}
}
// Create footer.
section.createFooter { footer in
...
}
}
}
Generics
Section
and Row
is compatible with generics.
Section
public class Section<HeaderType: UIView, FooterType: UIView>: SectionType {
...
}
Row
public class Row<CellType: UITableViewCell>: RowType {
...
}
cell
in the arguments of configureCell
is the type specified in the generics. Section header and section footer are also similar.
// 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's delegate
Row
has some delegate methods.
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.")
}
}
Supported delegate methods
- configureCell
- heightFor
- canRemove
- canMove
- canMoveTo
- didSelect
- didDeselect
- willDisplayCell
- didEndDisplayCell
- willRemove
- didRemove
License
Shoyu is released under the MIT license. See LICENSE for details.