11//
22// TreeView.m
33//
4+ // Author: kernel@realm
5+ //
46
5- #import " TreeTableView .h"
7+ #import " TreeTable .h"
68
7- @interface TreeTableView ()
9+ @interface TreeTable ()
810@property (strong , nonatomic , readonly ) NSMutableDictionary * model, *directModel;
911@property (nonatomic ) NSUInteger rootItemsCount;
1012
@@ -20,55 +22,26 @@ - (NSUInteger)rowOffsetForIndexPath:(NSIndexPath *)indexPath;
2022- (NSUInteger )rowOffsetForIndexPath : (NSIndexPath *)indexPath root : (NSIndexPath *)root ;
2123@end
2224
23- @implementation TreeTableView
24-
25- - (id )initWithCoder : (NSCoder *)decoder {
26- self = [super initWithCoder: decoder];
27- if (self) {
28- [self setupView ];
29- }
30- return self;
31- }
25+ @implementation TreeTable
3226
33- - (id )initWithFrame : (CGRect) frame {
34- self = [super initWithFrame: frame ];
27+ - (id )init {
28+ self = [super init ];
3529if (self) {
36- [self setupView ];
30+ _model = [NSMutableDictionary dictionary ];
31+ _directModel = [NSMutableDictionary dictionary ];
3732}
3833return self;
3934}
4035
41- - (void )setupView {
42- // Create underlying tableView.
43- {
44- _tableView = [[UITableView alloc ] initWithFrame: self .bounds];
45- self.tableView .autoresizingMask = self.autoresizingMask ;
46-
47- self.tableView .separatorStyle = UITableViewCellSeparatorStyleNone;
48-
49- self.tableView .delegate = self;
50- self.tableView .dataSource = self;
51-
52- [self addSubview: self .tableView];
53- }
54-
55- _model = [NSMutableDictionary dictionary ];
56- _directModel = [NSMutableDictionary dictionary ];
57- }
58-
59- - (void )setAutoresizingMask : (UIViewAutoresizing)autoresizingMask {
60- [super setAutoresizingMask: autoresizingMask];
61-
62- self.tableView .autoresizingMask = autoresizingMask;
63- }
36+ #pragma mark Instance methods
6437
6538- (NSIndexPath *)tableIndexPathFromTreePath : (NSIndexPath *)indexPath {
6639NSUInteger row = [self rowOffsetForIndexPath: indexPath];
6740return [NSIndexPath indexPathForRow: row inSection: 0 ];
6841}
6942
7043/* *
71- * Converts TreeTableView indexPath to TableView row index.
44+ * Converts TreeTable indexPath to TableView row index.
7245 */
7346- (NSUInteger )rowOffsetForIndexPath : (NSIndexPath *)indexPath {
7447NSUInteger totalCount = 0 ;
@@ -99,8 +72,8 @@ - (NSUInteger)rowOffsetForIndexPath:(NSIndexPath *)indexPath root:(NSIndexPath *
9972if (num) {
10073subitemsCount = num.intValue ;
10174} else {
102- if ([self .dataSource treeView: self expanded: root]) {
103- subitemsCount = [self .dataSource treeView: self numberOfSubitems: root];
75+ if ([self .dataSource treeView: self .tableView expanded: root]) {
76+ subitemsCount = [self .dataSource treeView: self .tableView numberOfSubitems: root];
10477}
10578}
10679
@@ -234,8 +207,8 @@ - (void)close:(NSIndexPath *)indexPath array:(NSMutableArray *)rows {
234207- (NSUInteger )numberOfSubitems : (NSIndexPath *)indexPath {
235208NSUInteger count = 0 ;
236209
237- if ([self .dataSource treeView: self expanded: indexPath]) {
238- NSUInteger subitemsCount = [self .dataSource treeView: self numberOfSubitems: indexPath];
210+ if ([self .dataSource treeView: self .tableView expanded: indexPath]) {
211+ NSUInteger subitemsCount = [self .dataSource treeView: self .tableView numberOfSubitems: indexPath];
239212for (int i=0 ; i<subitemsCount; i++ ) {
240213NSIndexPath * subitemPath = [indexPath indexPathByAddingIndex: i];
241214count += [self numberOfSubitems: subitemPath];
@@ -313,9 +286,19 @@ - (UITableViewCell*)itemForIndexPath:(NSIndexPath *)indexPath {
313286
314287#pragma mark UITableViewDelegate, -DataSource
315288
289+ #pragma mark Sections & Footers
290+
291+ - (NSInteger )numberOfSectionsInTableView : (UITableView *)tableView {
292+ return 1 ;
293+ }
294+
295+ #pragma mark Cells
296+
316297- (NSInteger )tableView : (UITableView *)tableView numberOfRowsInSection : (NSInteger )section {
298+ _tableView = tableView;
299+
317300// IndexPath==nil: root items.
318- NSUInteger totalCount = self.rootItemsCount = [self .dataSource treeView: self numberOfSubitems: nil ];
301+ NSUInteger totalCount = self.rootItemsCount = [self .dataSource treeView: self .tableView numberOfSubitems: nil ];
319302
320303// Calc subitems of expanded items.
321304for (int i=0 ; i<self.rootItemsCount ; i++ ) {
@@ -331,14 +314,14 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N
331314NSLog (@" ERR. Invalid itemPath: %@ " , itemPath);
332315return nil ;
333316}
334- return [self .dataSource treeView: self itemForIndexPath: itemPath];
317+ return [self .dataSource treeView: self .tableView itemForIndexPath: itemPath];
335318}
336319
337320- (void )tableView : (UITableView *)tableView didSelectRowAtIndexPath : (NSIndexPath *)indexPath {
338321if ([self .delegate respondsToSelector: @selector (treeView:clicked: )]) {
339322NSIndexPath *ip = [self treeIndexOfRow: indexPath.row];
340323
341- [self .delegate treeView: self clicked: ip];
324+ [self .delegate treeView: self .tableView clicked: ip];
342325}
343326}
344327
@@ -355,7 +338,7 @@ - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPa
355338NSLog (@" ERR. Invalid itemPath: %@ " , itemPath);
356339return defaultHeight;
357340}
358- return [self .delegate treeView: self heightForItemAtIndexPath: itemPath];
341+ return [self .delegate treeView: self .tableView heightForItemAtIndexPath: itemPath];
359342}
360343
361344@end
0 commit comments