/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

  1. If you have any trouble with content controller's frame or size,just try set viewFrame property, which make you free to customize your own size.

  2. 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.