Skip to content
Stylish and animated tab view for iOS rendered entirely using core graphics.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


This is a dark-themed and easy to use tab view created entirely using Core Graphics, so that it is easy to drop-in to your projects and operates smoothly on iOS devices. The library itself will also be used in Alien Blue's upcoming iOS updates.

How it looks

Here's what JMTabView looks like:

And on a retina display:


A demo project is included in this repository so that you can dive right in. In brief, to draw the tab view, you can do the following:

JMTabView * tabView = [[[JMTabView alloc] initWithFrame:frame] autorelease];

[tabView setDelegate:self];

You can then add tab items:

[tabView addTabItemWithTitle:@"One" icon:[UIImage imageNamed:@"icon1.png"]];

By implementing the tabView:didSelectTabAtIndex: method, you will receive a callback when the tab selection changes.


You can set the icon: to nil if you prefer to use text only, or title: to nil to show icons only.

If you prefer to use JMTabView as a toolbar you can use the setMomentary: method to change its selection behaviour.

JMTabView also supports the execution of blocks so that you can embed your logic per tab item, like this:

[tabView addTabItemWithTitle:@"Tab" icon:nil executeBlock:^{ // do stuff after item has been selected }];


You can subclass JMTabItem and JMSelectionView to completely customize the view of the tabs. For example, in the inclusive Demo you can see how I've customized the view to render tabs like this:


If you prefer to use JMTabView as a dynamic library in your project, please be sure to add -ObjC -all_load to your target's Other Linker Flags. Alternatively, you can reference the .h and .m files directly.


This project uses the UIView+Positioning and UIView+Size categories developed by the very talented Kevin O'Neill.


JMTabView is BSD licensed, so you can freely use it in commercial applications.

You can’t perform that action at this time.