109 lines
2.3 KiB
Markdown
109 lines
2.3 KiB
Markdown
# tablet
|
|
|
|
Tablet is a super lightweight yet powerful library that handles a complexity of UITableView's datasource and delegate.
|
|
|
|
## Requirements
|
|
|
|
- iOS 8.0+
|
|
- Xcode 7.0+
|
|
|
|
## Usage
|
|
|
|
### Very basic
|
|
|
|
```swift
|
|
import Tablet
|
|
|
|
let rowBuilder = TableRowBuilder<User, UITableViewCell>(items: [user1, user2, user3], id: "reusable_id")
|
|
.action(.configure) { data in
|
|
|
|
data.cell.textLabel?.text = data.item.title
|
|
data.cell.detailTextLabel?.text = data.item.isActive ? "Active" : "Inactive"
|
|
}
|
|
|
|
let sectionBuilder = TableSectionBuilder(headerTitle: "Users", rowBuilders: [rowBuilder])
|
|
|
|
let director = TableDirector(tableView: tableView)
|
|
director.appendSections(sectionBuilder)
|
|
```
|
|
|
|
### Cell actions
|
|
|
|
Tablet provides a chaining approach to handle actions from your cells:
|
|
|
|
```swift
|
|
import Tablet
|
|
|
|
let rowBuilder = TableRowBuilder<User, UITableViewCell>(items: [user1, user2, user3], id: "reusable_id")
|
|
.action(.configure) { data in
|
|
|
|
}
|
|
.action(.click) { data in
|
|
|
|
}
|
|
.action(.willDisplay) { data in
|
|
|
|
}
|
|
```
|
|
|
|
### Configurable cells
|
|
|
|
Let's say you want to put your cell configuration logic into cell itself. Say you want to pass your view model (or even model) to your cell.
|
|
To provide this behaviour simply follow:
|
|
|
|
```swift
|
|
import Tablet
|
|
|
|
class UserTableViewCell : UITableViewCell, ConfigurableCell {
|
|
|
|
typealias Item = User
|
|
|
|
static func reusableIdentifier() -> String {
|
|
return "reusable_id"
|
|
}
|
|
|
|
func configureWithItem(item: Item) { // item is user here
|
|
|
|
textLabel?.text = item.title
|
|
detailTextLabel?.text = item.isActive ? "Active" : "Inactive"
|
|
}
|
|
}
|
|
```
|
|
Once you follow the protocol, simply use TableConfigurableRowBuilder to build cells:
|
|
|
|
```swift
|
|
import Tablet
|
|
|
|
let rowBuilder = TableConfigurableRowBuilder<User, UserTableViewCell>()
|
|
rowBuilder.appendItems(users)
|
|
|
|
tableDirector.appendSection(TableSectionBuilder(rowBuilders: [rowBuilder]))
|
|
```
|
|
|
|
### Custom cell actions
|
|
```swift
|
|
import Tablet
|
|
|
|
class UserTableViewCell : UITableViewCell {
|
|
|
|
@IBAction func buttonClicked(sender: UIButton) {
|
|
|
|
Action(key: "action_key", sender: self, userInfo: nil).trigger()
|
|
}
|
|
}
|
|
```
|
|
And receive this actions with your row builder:
|
|
```swift
|
|
import Tablet
|
|
|
|
let rowBuilder = TableRowBuilder<User, UserTableViewCell>(items: users, id: "reusable_id")
|
|
.action(.click) { data in
|
|
|
|
}
|
|
.action(.willDisplay) { data in
|
|
|
|
}
|
|
.action("action_key") { data in
|
|
|
|
}
|
|
``` |