From d0773704c4a26aadff80d54bd040f79677669a82 Mon Sep 17 00:00:00 2001 From: Max Sokolov Date: Sun, 15 Nov 2015 16:43:01 +0300 Subject: [PATCH] readme updated --- README.md | 21 +++++++++++++----- .../UserInterfaceState.xcuserstate | Bin 26276 -> 26304 bytes 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index e047841..72ea91a 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,11 @@ ![Tablet](https://raw.githubusercontent.com/maxsokolov/tablet/assets/tablet.png) +

+Platform iOS +Swift 2.1 compatible +License: MIT +

+ Tablet is a super lightweight yet powerful generic library that handles a complexity of UITableView's datasource and delegate methods in a Swift environment. Tablet's goal is to provide an easiest way to create complex table views. With Tablet you don't have to write a messy code of switch or if statements when you deal with bunch of different cells in different sections. That's almost all you need in your controller to build a bunch of cells in a section: @@ -50,7 +56,7 @@ let rowBuilder = TableRowBuilder(items: [user1, user2, us let sectionBuilder = TableSectionBuilder(headerTitle: "Users", rowBuilders: [rowBuilder]) -let director = TableDirector(tableView: tableView) +director = TableDirector(tableView: tableView) director.appendSections(sectionBuilder) ``` @@ -85,6 +91,7 @@ import Tablet let rowBuilder = TableConfigurableRowBuilder() rowBuilder.appendItems(users) +director = TableDirector(tableView: tableView) tableDirector.appendSection(TableSectionBuilder(rowBuilders: [rowBuilder])) ``` @@ -95,7 +102,7 @@ Tablet provides a chaining approach to handle actions from your cells: ```swift import Tablet -let rowBuilder = TableRowBuilder(items: [user1, user2, user3], id: "reusable_id") +let rowBuilder = TableRowBuilder(items: [user1, user2, user3], id: "reusable_id") .action(.configure) { data in } @@ -111,11 +118,13 @@ let rowBuilder = TableRowBuilder(items: [user1, user2, us ```swift import Tablet -class UserTableViewCell : UITableViewCell { +let kMyAction = "action_key" + +class MyTableViewCell : UITableViewCell { @IBAction func buttonClicked(sender: UIButton) { - Action(key: "action_key", sender: self, userInfo: nil).trigger() + Action(key: kMyAction, sender: self, userInfo: nil).trigger() } } ``` @@ -123,14 +132,14 @@ And receive this actions with your row builder: ```swift import Tablet -let rowBuilder = TableRowBuilder(items: users, id: "reusable_id") +let rowBuilder = TableConfigurableRowBuilder(items: users, id: "reusable_id", estimatedRowHeight: 42) .action(.click) { data in } .action(.willDisplay) { data in } - .action("action_key") { data in + .action(kMyAction) { data in } ``` diff --git a/TabletDemo/TabletDemo.xcodeproj/project.xcworkspace/xcuserdata/maxsokolov.xcuserdatad/UserInterfaceState.xcuserstate b/TabletDemo/TabletDemo.xcodeproj/project.xcworkspace/xcuserdata/maxsokolov.xcuserdatad/UserInterfaceState.xcuserstate index 7cb6250b7ac308caaadbbd147c4f7405e31e9db6..066f0b0a4d703d999d3f99688b8d56aebb1f6a56 100644 GIT binary patch delta 5676 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 T+wlttf;vW6)-nFCFYEVz*0nHM delta 5497 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