From 668a40dbba8eb400bfd9532d7f7874de4f9af38e Mon Sep 17 00:00:00 2001 From: Max Sokolov Date: Wed, 11 Nov 2015 23:04:52 +0300 Subject: [PATCH] various improvements --- Tablet/Tablet.swift | 57 +++++++++--------- .../UserInterfaceState.xcuserstate | Bin 22974 -> 22937 bytes TabletDemo/TabletDemo/ViewController.swift | 8 +-- 3 files changed, 31 insertions(+), 34 deletions(-) diff --git a/Tablet/Tablet.swift b/Tablet/Tablet.swift index 8209a5b..33c9253 100644 --- a/Tablet/Tablet.swift +++ b/Tablet/Tablet.swift @@ -34,6 +34,7 @@ public enum ActionType : String { case configure = "_configure" case willDisplay = "_willDisplay" case shouldHighlight = "_shouldHighlight" + case height = "_height" } public struct ActionData { @@ -66,6 +67,15 @@ public enum ActionResult { return false } } + + public var returnValue: AnyObject? { + switch self { + case .Success(let returnValue): + return returnValue + case .Failure: + return nil + } + } } /** @@ -117,7 +127,7 @@ public protocol ConfigurableCell { A protocol that every row builder should follow. A certain section can only works with row builders that respect this protocol. */ -public protocol ReusableRowBuilder { +public protocol RowBuilder { var numberOfRows: Int { get } var reusableIdentifier: String { get } @@ -128,10 +138,12 @@ public protocol ReusableRowBuilder { /** A class that responsible for building cells of given type and passing items to them. */ -public class TableRowBuilder : ReusableRowBuilder { +public class TableRowBuilder : RowBuilder { + + public typealias ReturnValue = AnyObject public typealias TableRowBuilderActionBlock = (data: ActionData) -> Void - public typealias TableRowBuilderReturnValueActionBlock = (data: ActionData) -> AnyObject + public typealias TableRowBuilderReturnValueActionBlock = (data: ActionData) -> ReturnValue private var actions = Dictionary() private var items = [I]() @@ -188,12 +200,6 @@ public class TableRowBuilder : ReusableRowBuilder return self } - public func actionWithReturnValue(key: ActionType, action: (ActionData) -> Bool) -> Self { - - - return self - } - // MARK: Triggers public func triggerAction(key: String, cell: UITableViewCell, indexPath: NSIndexPath, itemIndex: Int) -> ActionResult { @@ -234,7 +240,7 @@ public class TableConfigurableRowBuilder (ReusableRowBuilder, Int)? { + internal func builderAtIndex(var index: Int) -> (RowBuilder, Int)? { for builder in builders { if index < builder.numberOfRows { @@ -330,7 +336,7 @@ public class TableDirector: NSObject, UITableViewDataSource, UITableViewDelegate - Returns: A touple - (builder, builderItemIndex) */ - private func builderAtIndexPath(indexPath: NSIndexPath) -> (ReusableRowBuilder, Int) { + private func builderAtIndexPath(indexPath: NSIndexPath) -> (RowBuilder, Int) { return sections[indexPath.section].builderAtIndex(indexPath.row)! } @@ -348,8 +354,7 @@ public class TableDirector: NSObject, UITableViewDataSource, UITableViewDelegate internal func didReceiveAction(notification: NSNotification) { - if let action = notification.object as? Action, - indexPath = tableView.indexPathForCell(action.cell) { + if let action = notification.object as? Action, indexPath = tableView.indexPathForCell(action.cell) { let builder = builderAtIndexPath(indexPath) builder.0.triggerAction(action.key, cell: action.cell, indexPath: indexPath, itemIndex: builder.1) @@ -371,6 +376,7 @@ public class TableDirector: NSObject, UITableViewDataSource, UITableViewDelegate public func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let builder = builderAtIndexPath(indexPath) + let cell = tableView.dequeueReusableCellWithIdentifier(builder.0.reusableIdentifier, forIndexPath: indexPath) builder.0.triggerAction(ActionType.configure.rawValue, cell: cell, indexPath: indexPath, itemIndex: builder.1) @@ -418,20 +424,11 @@ public class TableDirector: NSObject, UITableViewDataSource, UITableViewDelegate let cell = tableView.cellForRowAtIndexPath(indexPath) - let a = triggerAction(.click, cell: cell, indexPath: indexPath) - switch a { - case .Success(let returnValue): - print(returnValue) - case .Failure: - print("") - } - - - /*if triggerAction(.click, cell: cell, indexPath: indexPath) { + if triggerAction(.click, cell: cell, indexPath: indexPath).isSuccess { tableView.deselectRowAtIndexPath(indexPath, animated: true) } else { triggerAction(.select, cell: cell, indexPath: indexPath) - }*/ + } } public func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) { @@ -440,17 +437,17 @@ public class TableDirector: NSObject, UITableViewDataSource, UITableViewDelegate } public func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) { - + triggerAction(.willDisplay, cell: cell, indexPath: indexPath) } public func tableView(tableView: UITableView, shouldHighlightRowAtIndexPath indexPath: NSIndexPath) -> Bool { - return true + return triggerAction(.shouldHighlight, cell: tableView.cellForRowAtIndexPath(indexPath), indexPath: indexPath).returnValue as? Bool ?? true } - + public func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { - return trigger() as! CGFloat + return triggerAction(.height, cell: tableView.cellForRowAtIndexPath(indexPath), indexPath: indexPath).returnValue as? CGFloat ?? tableView.rowHeight } } \ No newline at end of file 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 14c3ca349df8548a7d54b72f47381ddbe096e21a..e703eba5a373b116ab59d025e0486ecf495261a9 100644 GIT binary patch delta 10113 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 L(s}!<;Qs#rp^J2E delta 10145 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 diff --git a/TabletDemo/TabletDemo/ViewController.swift b/TabletDemo/TabletDemo/ViewController.swift index 73f99c6..60f6081 100644 --- a/TabletDemo/TabletDemo/ViewController.swift +++ b/TabletDemo/TabletDemo/ViewController.swift @@ -23,6 +23,10 @@ class ViewController: UIViewController { data.cell.textLabel?.text = "\(data.item)" } + .action(.shouldHighlight) { _ in + + return false + } let configurableRowBuilder = TableConfigurableRowBuilder(items: ["5", "6", "7", "8"]) .action(kConfigurableTableViewCellButtonClickedAction) { data in @@ -33,10 +37,6 @@ class ViewController: UIViewController { print("custom action indexPath: \(data.indexPath), item: \(data.item)") } - .action(.shouldHighlight) { _ in - - return 90 - } let sectionBuilder = TableSectionBuilder(headerTitle: "Tablet", footerTitle: "Deal with table view like a boss.", rowBuilders: [rowBuilder, configurableRowBuilder])