From d0486136053563d6d7a2abbd8c850168d9b9483f Mon Sep 17 00:00:00 2001 From: Max Sokolov Date: Sun, 20 Mar 2016 13:06:45 +0300 Subject: [PATCH] improve internal logic --- .../UserInterfaceState.xcuserstate | Bin 16227 -> 15819 bytes Tablet/TableRowBuilder.swift | 56 +++++++++++------- Tablet/Tablet.swift | 17 +----- .../ViewControllers/MainViewController.swift | 4 ++ 4 files changed, 38 insertions(+), 39 deletions(-) diff --git a/Tablet.xcworkspace/xcuserdata/maxsokolov.xcuserdatad/UserInterfaceState.xcuserstate b/Tablet.xcworkspace/xcuserdata/maxsokolov.xcuserdatad/UserInterfaceState.xcuserstate index 1fef06ba080bf7765c84906d1a4d0237192fb3d4..7edcc6accdff2932934599edf31da711b7bb9439 100644 GIT binary patch delta 9153 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 LYVLKviI4vuJ@vdo delta 9268 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 { } } +public class RowBuilder : NSObject { + + public private(set) var reusableIdentifier: String + public var numberOfRows: Int { + return 0 + } + public var estimatedRowHeight: Float { + return 44 + } + + init(id: String) { + reusableIdentifier = id + } + + // MARK: internal methods, must be overriden in subclass + + func invokeAction(actionType: ActionType, cell: UITableViewCell?, indexPath: NSIndexPath, itemIndex: Int, userInfo: [NSObject: AnyObject]?) -> AnyObject? { + return nil + } + + func registerCell(inTableView tableView: UITableView) { + } +} + /** Responsible for building cells of given type and passing items to them. */ @@ -48,25 +72,18 @@ public class TableRowBuilder : RowBuilder { private var actions = Dictionary>() private var items = [I]() - public var reusableIdentifier: String - public var estimatedRowHeight: Float { - return 44 - } - public var numberOfRows: Int { - get { - return items.count - } + public override var numberOfRows: Int { + return items.count } public init(item: I, id: String? = nil) { - - reusableIdentifier = id ?? NSStringFromClass(C).componentsSeparatedByString(".").last ?? "" + super.init(id: id ?? NSStringFromClass(C).componentsSeparatedByString(".").last ?? "") + items.append(item) } public init(items: [I]? = nil, id: String? = nil) { - - reusableIdentifier = id ?? NSStringFromClass(C).componentsSeparatedByString(".").last ?? "" + super.init(id: id ?? NSStringFromClass(C).componentsSeparatedByString(".").last ?? "") if items != nil { self.items.appendContentsOf(items!) @@ -95,7 +112,7 @@ public class TableRowBuilder : RowBuilder { // MARK: Triggers - public func invokeAction(actionType: ActionType, cell: UITableViewCell?, indexPath: NSIndexPath, itemIndex: Int, userInfo: [NSObject: AnyObject]?) -> AnyObject? { + override func invokeAction(actionType: ActionType, cell: UITableViewCell?, indexPath: NSIndexPath, itemIndex: Int, userInfo: [NSObject: AnyObject]?) -> AnyObject? { if let action = actions[actionType.key] { return action.invoke(ActionData(cell: cell as? C, indexPath: indexPath, item: items[itemIndex], itemIndex: itemIndex, userInfo: userInfo)) @@ -103,7 +120,7 @@ public class TableRowBuilder : RowBuilder { return nil } - public func registerCell(inTableView tableView: UITableView) { + override func registerCell(inTableView tableView: UITableView) { if tableView.dequeueReusableCellWithIdentifier(reusableIdentifier) != nil { return @@ -128,23 +145,20 @@ public class TableRowBuilder : RowBuilder { Responsible for building configurable cells of given type and passing items to them. */ public class TableConfigurableRowBuilder : TableRowBuilder { - + public override var estimatedRowHeight: Float { - return C.estimatedHeight() } public init(item: I) { - super.init(item: item, id: C.reusableIdentifier()) } public init(items: [I]? = nil) { - super.init(items: items, id: C.reusableIdentifier()) } - public override func invokeAction(actionType: ActionType, cell: UITableViewCell?, indexPath: NSIndexPath, itemIndex: Int, userInfo: [NSObject: AnyObject]?) -> AnyObject? { + override func invokeAction(actionType: ActionType, cell: UITableViewCell?, indexPath: NSIndexPath, itemIndex: Int, userInfo: [NSObject: AnyObject]?) -> AnyObject? { switch actionType { case .configure: @@ -160,22 +174,18 @@ public extension TableRowBuilder { // MARK: Items manipulation public func appendItems(items: [I]) { - self.items.appendContentsOf(items) } public func clear() { - items.removeAll() } } public func +=(left: TableRowBuilder, right: I) { - left.appendItems([right]) } public func +=(left: TableRowBuilder, right: [I]) { - left.appendItems(right) } \ No newline at end of file diff --git a/Tablet/Tablet.swift b/Tablet/Tablet.swift index 3a4eaa0..9c344d0 100644 --- a/Tablet/Tablet.swift +++ b/Tablet/Tablet.swift @@ -22,7 +22,7 @@ import UIKit import Foundation struct TabletNotifications { - static let CellAction = "_cellaction" + static let CellAction = "TabletNotificationsCellAction" } /** @@ -113,21 +113,6 @@ public protocol ConfigurableCell { public extension ConfigurableCell where Self: UITableViewCell { static func reusableIdentifier() -> String { - return NSStringFromClass(self).componentsSeparatedByString(".").last ?? "" } -} - -/** - A protocol that every row builder should follow. - A certain section can only works with row builders that respect this protocol. -*/ -public protocol RowBuilder { - - var numberOfRows: Int { get } - var reusableIdentifier: String { get } - var estimatedRowHeight: Float { get } - - func registerCell(inTableView tableView: UITableView) - func invokeAction(actionType: ActionType, cell: UITableViewCell?, indexPath: NSIndexPath, itemIndex: Int, userInfo: [NSObject: AnyObject]?) -> AnyObject? } \ No newline at end of file diff --git a/TabletDemo/Classes/Presentation/Main/ViewControllers/MainViewController.swift b/TabletDemo/Classes/Presentation/Main/ViewControllers/MainViewController.swift index 3831c57..3bb415a 100644 --- a/TabletDemo/Classes/Presentation/Main/ViewControllers/MainViewController.swift +++ b/TabletDemo/Classes/Presentation/Main/ViewControllers/MainViewController.swift @@ -25,5 +25,9 @@ class MainViewController : UITableViewController { data.cell?.accessoryType = .DisclosureIndicator data.cell?.textLabel?.text = "\(data.item)" } + .action(.click) { data -> Void in + + + } } } \ No newline at end of file