GCRetractableSectionController is an helper class that let you make easily section of UITableView
that detract and contract when tapped.
(See the demo project included)
First thing you need to do is subclass GCRetractableSectionController
to have your own section controller. (You can also look at GCArraySectionController
, a drop-in subclass that you can use right away, available in the demo project.)
The basics things you need to overwrite are the following.
@property (nonatomic, copy, readonly) NSString* title; @property (nonatomic, readonly) NSUInteger contentNumberOfRow; - (NSString*) titleContentForRow:(NSUInteger) row;
The title
property represent the title of the section. The title
is shown in the main cell when the section controller is closed. The contentNumberOfRow
should return the number of rows of content in your section (the title cell is not content). You also overwrite titleContentForRow:
to provide the title of your content cells.
See the GCSimpleSectionController
example in the demo project.
To react to selection of your content, you should overwrite in your section controller this method.
- (void)didSelectContentCellAtRow:(NSUInteger)row;
You can also change have more control on the content of your cells by overwriting the following methods. Look at the GCCustomSectionController
in the demo project for more details.
- (UITableViewCell *)cellForRow:(NSUInteger)row; - (UITableViewCell *)titleCell; - (UITableViewCell *)contentCellForRow:(NSUInteger)row;
When your GCRetractableSectionController
is ready, you need to use it in your UIViewController
.
You initialize your subclass by providing your UIViewController
. You UIViewController
must respond to the ‘tableView’ selector and return a UITableView
. You’ll probably want to save that section controller as an ivar.
YourSectionController* sectionController = [[YourSectionController alloc] initWithViewController:self];
GCRetractableSectionController
provide simple method for you to use in you UITableView
’s dataSource. An example usage follow.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { GCRetractableSectionController* sectionController = /*Your section controller ivar*/; return sectionController.numberOfRow; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { GCRetractableSectionController* sectionController = /*Your section controller ivar*/; return [sectionController cellForRow:indexPath.row]; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { GCRetractableSectionController* sectionController = /*Your section controller ivar*/; return [sectionController didSelectCellAtRow:indexPath.row]; }