WMPageController 中文介绍
An easy solution to page controllers like NetEase News
See CHANGELOG for more information.
Create an controller extends from WMPageController.There are two ways to init the WMPageController:
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; 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 datasource methods in YOUR WMPageController after initialize it.
It's easy for you to customize your controller as following, just implement these two datasource methods.
- (CGRect)pageController:(WMPageController *)pageController preferredFrameForContentView:(WMScrollView *)contentView; - (CGRect)pageController:(WMPageController *)pageController preferredFrameForMenuView:(WMMenuView *)menuView; When you want to change the frame of contentView, you need to call -forceLayoutSubViews method. This will recall the datasource method above and re-layout subviews. If you are interested, see viewFrameExample for more detail.
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; }See StoryboardExample for more detail.
You can easily change style by setting xxxPageController.style = WMMenuViewStyleLine.
If you want menuView to show on the navigation bar, set .showOnNavigationBar = YES;
If you want the newest version, try 2.4.0 (This has some API modified)
pod 'WMPageController', '~> 2.4.0' If you perfer the old, just use 2.3.0 and it's fine.
pod 'WMPageController', '2.3.0' -
If you have any trouble with content controller's frame or size,just try set
viewFrameproperty, which make you free to customize your own size. -
You can put every controller in
WMPageController,But if you want have aUICollectionViewControllerin, please have an attention toUICollectionViewController'sinit method.
You should override the- initto giveUICollectionViewControlleraUICollectionViewLayout. Here is an example:
- (instancetype)init { // init layout here... self = [self initWithCollectionViewLayout:layout]; if (self) { // insert code here... } return self; }This project is under MIT License. See LICENSE file for more information.
