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.