@@ -37,13 +37,13 @@ @protocol FZAccordionTableViewHeaderViewDelegate;
37
37
38
38
@interface FZAccordionTableViewHeaderView ()
39
39
40
- @property (nonatomic ) NSInteger section;
40
+ // @property (nonatomic) NSInteger section;
41
41
@property (nonatomic , weak ) id <FZAccordionTableViewHeaderViewDelegate> delegate;
42
42
43
43
@end
44
44
45
45
@protocol FZAccordionTableViewHeaderViewDelegate <NSObject >
46
- - (void )headerView : (FZAccordionTableViewHeaderView *)sectionHeaderView didSelectHeaderInSection : ( NSInteger ) section ;
46
+ - (void )tappedHeaderView : (FZAccordionTableViewHeaderView *)sectionHeaderView ;
47
47
@end
48
48
49
49
@implementation FZAccordionTableViewHeaderView
@@ -67,10 +67,7 @@ - (void)singleInit {
67
67
}
68
68
69
69
- (void )touchedHeaderView : (UITapGestureRecognizer *)recognizer {
70
-
71
-
72
-
73
- [self .delegate headerView: self didSelectHeaderInSection: self .section];
70
+ [self .delegate tappedHeaderView: self ];
74
71
}
75
72
76
73
@end
@@ -161,8 +158,34 @@ - (NSArray *)getIndexPathsForSection:(NSInteger)section {
161
158
- (void )toggleSection : (NSInteger )section {
162
159
163
160
FZAccordionTableViewHeaderView *headerView = (FZAccordionTableViewHeaderView *)[self headerViewForSection: section];
161
+ [self tappedHeaderView: headerView];
162
+ }
163
+
164
+ - (NSInteger )sectionForHeaderView : (UITableViewHeaderFooterView *)headerView {
165
+
166
+ NSInteger section = NSNotFound ;
167
+ NSInteger minSection = 0 ;
168
+ NSInteger maxSection = self.numberOfSections ;
169
+
170
+ CGRect headerViewFrame = headerView.frame ;
171
+ CGRect compareHeaderViewFrame;
164
172
165
- [self headerView: headerView didSelectHeaderInSection: section];
173
+ while (minSection <= maxSection) {
174
+ NSInteger middleSection = (minSection+maxSection)/2 ;
175
+ compareHeaderViewFrame = [self rectForHeaderInSection: middleSection];
176
+ if (CGRectEqualToRect (headerViewFrame, compareHeaderViewFrame)) {
177
+ section = middleSection;
178
+ break ;
179
+ }
180
+ else if (headerViewFrame.origin .y > compareHeaderViewFrame.origin .y ) {
181
+ minSection = middleSection+1 ;
182
+ }
183
+ else {
184
+ maxSection = middleSection-1 ;
185
+ }
186
+ }
187
+
188
+ return section;
166
189
}
167
190
168
191
#pragma mark - UITableView Overrides -
@@ -245,40 +268,10 @@ - (void)setInitialOpenSections:(NSSet *)initialOpenedSections {
245
268
246
269
#pragma mark - FZAccordionTableViewHeaderViewDelegate -
247
270
248
-
249
-
250
- - (NSInteger )sectionForHeaderView : (UITableViewHeaderFooterView *)headerView {
251
-
252
- NSInteger section = NSNotFound ;
253
- NSInteger min = 0 ;
254
- NSInteger max = self.numberOfSections ;
255
-
256
- CGRect headerViewFrame = headerView.frame ;
257
- CGRect compareHeaderViewFrame;
258
-
259
- while (min <= max) {
260
- NSInteger mid = (min+max)/2 ;
261
- compareHeaderViewFrame = [self rectForHeaderInSection: mid];
262
- if (CGRectEqualToRect (headerViewFrame, compareHeaderViewFrame)) {
263
- section = mid;
264
- break ;
265
- }
266
- else if (headerViewFrame.origin .y > compareHeaderViewFrame.origin .y ) {
267
- min = mid+1 ;
268
- }
269
- else {
270
- max = mid-1 ;
271
- }
272
- }
273
-
274
- return section;
275
- }
276
-
277
-
278
-
279
- - (void )headerView : (FZAccordionTableViewHeaderView *)sectionHeaderView didSelectHeaderInSection : (NSInteger )section {
271
+ - (void )tappedHeaderView : (FZAccordionTableViewHeaderView *)sectionHeaderView {
272
+ NSParameterAssert (sectionHeaderView);
280
273
281
- section = [self sectionForHeaderView: sectionHeaderView];
274
+ NSInteger section = [self sectionForHeaderView: sectionHeaderView];
282
275
283
276
// Do not interact with sections that are always opened
284
277
if ([self isAlwaysOpenedSection: section]) {
@@ -445,7 +438,6 @@ - (UIView*)tableView:(UITableView*)tableView viewForHeaderInSection:(NSInteger)s
445
438
if ([self .subclassDelegate respondsToSelector: @selector (tableView:viewForHeaderInSection: )]) {
446
439
headerView = (FZAccordionTableViewHeaderView *)[self .subclassDelegate tableView: tableView viewForHeaderInSection: section];
447
440
if ([headerView isKindOfClass: [FZAccordionTableViewHeaderView class ]]) {
448
- headerView.section = section;
449
441
headerView.delegate = self;
450
442
}
451
443
}
0 commit comments