/Shoyu

Easier way to represent the structure of UITableView.

Primary LanguageSwiftMIT LicenseMIT

Shoyu

Pod Version Pod Platform Pod License Build Status

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.