Android style page control
- Swipable tab bar
- Clickable tab to move to specific page
- Current page indicator with fade effect on non current title
- Easy to modify code
- Lazy loading for smoother performance ( Provide view controller instances only when moved to that page )
- Easy to setup color theme
- Many customisation parameters
//Initial visible page
@property(nonatomic) int iFirstVisiblePageNumber;
//Color theme
@property(nonatomic) UIColor *colorTitleBarBackground; //Top horizontal page name listing view background color
@property(nonatomic) UIColor *colorTabText; //Page title text color
@property(nonatomic) UIColor *colorPageIndicator; //Horizontal page indicator line color
@property(nonatomic) UIColor *colorPageOverscrollBackground; //Background color to show when overscrolled/bounced
//UI Size related customisation
@property(nonatomic) int iTitleViewHeight; //Top title view height
@property(nonatomic) int iPageIndicatorHeight; //Height of horizontal line indicating current page
@property(nonatomic) UIFont *fontTitleTabText; //Page title font
//Bounce effect on/off
@property(nonatomic) BOOL bEnablePagesEndBounceEffect; //Bounce for pages
@property(nonatomic) BOOL bEnableTitlesEndBounceEffect; //Bounce for title
//More pages on right/left indicator
@property(nonatomic) BOOL bShowMoreTabAvailableIndicator; //Indicator on left and right of title view to show more pages are available
//Hide shodow
@property(nonatomic) BOOL bHideShadow; //Hides shadow between title bar and pages
//Fixed tab width
/*
Default - Calculates based on text length, dont set any value
Custom - E.g to show 3 tabs at a time configure control like _pageControl.iCustomTabWidth = [[UIScreen mainScreen] bounds].size.width/3;
*/
@property(nonatomic) int iCustomFixedTabWidth;
//Go to specific page by page index
-(void)goToPageWithPageNumber:(int) iPageNumber;
This UI control can be used on all iPhones, iPods & iPads running iOS 6.0 and above.
- Add Following 3 control files to your project from ADPageControl directory located under "ControlFiles/" or from demo project
'ADPageControl.h'
'ADPageControl.m'
'ADPageControl.xib'
//1. IMPORT
"#import "ADPageControl.h"
//2. DECLARE
ADPageControl *_pageControl; //Declare
//3. SETUP PAGE MODEL USING CLASS "ADPageModel"
//page 0
ADPageModel *pageModel0 = [[ADPageModel alloc] init];
UIViewController *page0 = [UIViewController new];
page0.view.backgroundColor = COLOR_LIGHT_RED;
pageModel0.strPageTitle = @"Reeed";
pageModel0.iPageNumber = 0;
pageModel0.viewController = page0;//You can provide view controller in prior OR use flag "bShouldLazyLoad" to load only when required
//page 1
ADPageModel *pageModel1 = [[ADPageModel alloc] init];
pageModel1.strPageTitle = @"Greeeeeeeen";
pageModel1.iPageNumber = 1;
pageModel1.bShouldLazyLoad = YES;
//page 2
ADPageModel *pageModel2 = [[ADPageModel alloc] init];
pageModel2.strPageTitle = @"Blueeee";
pageModel2.iPageNumber = 2;
pageModel2.bShouldLazyLoad = YES;
//page 3
ADPageModel *pageModel3 = [[ADPageModel alloc] init];
pageModel3.strPageTitle = @"Yeeellow";
pageModel3.iPageNumber = 3;
pageModel3.bShouldLazyLoad = YES;
//4. INITIALIZE PAGE CONTROL
_pageControl = [[ADPageControl alloc] init];
_pageControl.delegateADPageControl = self;
_pageControl.arrPageModel = [[NSMutableArray alloc] initWithObjects:
pageModel0,
pageModel1,
pageModel2,
pageModel3, nil];
//5. OPTIONAL CUSTOMISATION PARAMETERS SETUP
_pageControl.iFirstVisiblePageNumber = 1;
_pageControl.iTitleViewHeight = 40;
_pageControl.iPageIndicatorHeight = 4;
_pageControl.fontTitleTabText = [UIFont fontWithName:@"Helvetica" size:16];
_pageControl.bEnablePagesEndBounceEffect = NO;
_pageControl.bEnableTitlesEndBounceEffect = NO;
_pageControl.colorTabText = [UIColor whiteColor];
_pageControl.colorTitleBarBackground = [UIColor purpleColor];
_pageControl.colorPageIndicator = [UIColor whiteColor];
_pageControl.colorPageOverscrollBackground = [UIColor lightGrayColor];
_pageControl.bShowMoreTabAvailableIndicator = NO;
_pageControl.bHideShadow = NO;
//6. ADD AS SUBVIEW
[self.view addSubview:_pageControl.view];
_pageControl.view.translatesAutoresizingMaskIntoConstraints = NO;
UIView *subview = _pageControl.view;
//Leading margin 0, Trailing margin 0
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[subview]-0-|"
options:0
metrics:nil
views:NSDictionaryOfVariableBindings(subview)]];
//Top margin 20 for status bar, Bottom margin 0
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-20-[subview]-0-|"
options:0
metrics:nil
views:NSDictionaryOfVariableBindings(subview)]];
//7. CONFORM TO DELEGATE
//7.A : Conform <ADPageControlDelegate>
//7.B : HANDLE LAZY LOADING BY PROVIDING VIEW CONTROLLERS (Optional : Applicable only if you want to lazy load view controllers)
-(UIViewController *)adPageControlGetViewControllerForPageModel:(ADPageModel *) pageModel
{
NSLog(@"ADPageControl :: Lazy load asking for page %d",pageModel.iPageNumber);
if(pageModel.iPageNumber == 1)
{
UIViewController *page1 = [UIViewController new];
page1.view.backgroundColor = COLOR_LIGHT_GREEN;
return page1;
}
else if(pageModel.iPageNumber == 2)
{
UIViewController *page2 = [UIViewController new];
page2.view.backgroundColor = COLOR_LIGHT_BLUE;
return page2;
}
else if(pageModel.iPageNumber == 3)
{
UIViewController *page3 = [UIViewController new];
page3.view.backgroundColor = COLOR_LIGHT_YELLOW;
return page3;
}
return nil;
}
//7.C : Get index of currenty visible page (Optional)
-(void)adPageControlCurrentVisiblePageIndex:(int) iCurrentVisiblePage
{
NSLog(@"ADPageControl :: Current visible page index : %d",iCurrentVisiblePage);
}
- ADPageControl works on iOS 6.0 & above versions and is compatible with ARC projects.
- There is no need of other frameworks/libraries.
- Compatible devices : iPhone, iPad, iPod
- Testing : iOS 6, 7, 8 & 9 (I have used this in my apps it is well tested and stable)
iOSCustomPageControl is available under the MIT license. See the LICENSE file for more info.