Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Controller that helps the management of UITableViews extendable sections
branch: master
Failed to load latest commit information.
Demo Update project
GCRetractableSectionController Add missing rowAnimation
.gitignore Add .gitignore
LICENSE.txt Update license for dual licensing
README.textile Update README.textile



GCRetractableSectionController is an helper class that let you make easily section of UITableView that detract and contract when tapped.


(See the demo project included)

Creation and customization

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;

UITableView’s dataSource usage

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];
Something went wrong with that request. Please try again.