-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTableViewGroupedSource.m
122 lines (86 loc) · 2.3 KB
/
TableViewGroupedSource.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
//
// TableViewGroupedSource.m
//
// Licensed by ruralcoder.com under the
// Creative Commons Attribution-ShareAlike 3.0 Unported License
#import "TableViewGroupedSource.h"
#import "NSDictionaryExtension.h"
@interface TableViewGroupedSource ()
@property (nonatomic, retain) NSMutableDictionary *groups;
@property (nonatomic, retain) NSMutableArray *groupOrder;
@end
@implementation TableViewGroupedSource
@synthesize groups;
@synthesize groupOrder;
- (id) init
{
self = [super init];
if (self)
{
self.groups = [NSMutableDictionary dictionary];
self.groupOrder = [NSMutableArray array];
}
return self;
}
- (void) dealloc
{
self.groups = nil;
self.groupOrder = nil;
[super dealloc];
}
- (void) setDataSourceForGroup:(id)groupName data:(NSArray*)dataSource
{
NSParameterAssert(groupName != nil);
if (dataSource == nil)
return;
if ([dataSource count] == 0)
return;
if ([[dataSource objectAtIndex:0] isKindOfClass:[UITableViewCellInfo class]] == NO)
NSAssert(NO, @"Error - Unsupported data type in group source. Add UITableViewCellInfo only.");
[self.groupOrder addObject:groupName];
[self.groups setObject:dataSource forKey:groupName];
}
- (NSString*)description
{
return [self.groupOrder description];
}
- (BOOL) isEmpty
{
if (self.groupOrder.count == 0)
return YES;
NSUInteger rows = 0;
for (id key in groupOrder)
{
NSArray *groupRows = [self.groups arrayForKey:key];
rows += groupRows.count;
}
return (rows == 0);
}
- (void) reset
{
[self.groupOrder removeAllObjects];
[self.groups removeAllObjects];
}
- (NSUInteger) numberOfSections
{
return [self.groupOrder count];
}
- (id) groupNameForSection:(NSUInteger)section
{
return [self.groupOrder objectAtIndex:section];
}
- (id) dataSourceForSection:(NSUInteger)section
{
id key = [self groupNameForSection:section];
return [self.groups arrayForKey:key];
}
- (NSUInteger) numberOfRowsInSection:(NSUInteger)section
{
return [[self dataSourceForSection:section] count];
}
- (id) objectForIndexPath:(NSIndexPath*) indexPath
{
NSArray *dataSource = [self dataSourceForSection:indexPath.section];
return [dataSource objectAtIndex:indexPath.row];
}
@end