/WMPageController

An easy solution to page controllers like NetEase News

Primary LanguageObjective-CMIT LicenseMIT

WMPageController 中文介绍

Platform License CocoaPods Version

An easy solution to page controllers like NetEase News

Overview


Swift Version

Click here: https://github.com/wangmchn/WMPageController-Swift

Basic use

  1. Drag files in red frame to your project.

  1. Create an controller extends from WMPageController.There are two ways to init the WMPageController:

Init with Classes

Use the following constructor to init the controller:

- (instancetype)initWithViewControllerClasses:(NSArray *)classes 
                               andTheirTitles:(NSArray *)titles;

Here are two important porperties:

classes :contains the classes of child view controllers, just like [UITableViewController class];
titles  :Each View controller's title to show in the menu view at the top of the view;

Use datasource

The usage is very familiar to UITableView, these are the methods need to implement:

- (NSInteger)numbersOfChildControllersInPageController:(WMPageController *)pageController;

- (__kindof UIViewController *)pageController:(WMPageController *)pageController viewControllerAtIndex:(NSInteger)index;

- (NSString *)pageController:(WMPageController *)pageController titleAtIndex:(NSInteger)index;

Just implement these three datasource methods in YOUR WMPageController after initialize it.

More

To have a custom page controller,please set the properties in WMPageController ,They are: titleSize, titleColor, menuHeight, pageAnimatable, menuBGColor, menuItemWidth,and also itemsWidths.

ViewFrame

It's easy for you to customize your controller as following, just set viewFrame and done.
See ViewFrameDemo for more information.

Use Storyboard / xib

1.If you init the WMPageController with child controller's class,override the -init method in WMPageController's childViewController, For example:

- (instancetype)init {
    return [self initWithNibName:@"xxxViewController" bundle:nil];
}

2.If you are using datasource, Just implement -pageController:viewControllerAtIndex: as following:

- (UIViewController *)pageController:(WMPageController *)pageController viewControllerAtIndex:(NSInteger)index {
    UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    UIViewController *vc = [sb instantiateViewControllerWithIdentifier:@"WMViewController"];
    return vc;
}

Styles

There are 4 styles to choose, They are WMMenuViewStyleDefault, WMMenuViewStyleLine, WMMenuViewStyleFoold, WMMenuViewStyleFooldHollow;

You can easily change style by setting xxxPageController.style = WMMenuViewStyleLine.
If you want menuView to show on the navigation bar, set .showOnNavigationBar = YES;

Using CocoaPods

pod 'WMPageController'

Note

You can put every controller in WMPageController,But if you want have a UICollectionViewController in, please have an attention to UICollectionViewController's init method.
You should override the - init to give UICollectionViewController a UICollectionViewLayout. Here is an example:

- (instancetype)init {
    // init layout here...
    self = [self initWithCollectionViewLayout:layout];
    if (self) {
        // insert code here...
    }
    return self;
}

License

This project is under MIT License. See LICENSE file for more information.