wangmchn/WMPageController
wangmchn/WMPageController has 2,890 GitHub stars and 612 forks. GitHot measured 0 stars in 24 hours. Last checked 2026-11-07 19:37 UTC. Last push 2023-08-23.
An easy solution to page controllers like NetEase News
Measured star growth
- in 24h
- 0
- in 7 days
- Update delayed
- in 15 days
- Update delayed
- in 1 month
- Update delayed
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
README.md
OriginalWMPageController 中文介绍
An easy solution to page controllers like NetEase News
Overview

Change Log
See CHANGELOG for more information.
Basic use
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 (Recommend This Way!)
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.
Customize Content's Frame
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.
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;
}
See StoryboardExample for more detail.
Styles
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
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'
Note
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;
}
License
This project is under MIT License. See LICENSE file for more information.
Explore related projects
codecrafters-io/build-your-own-x
Master programming by recreating your favorite technologies from scratch.
560,882 starspublic-apis/public-apis
A collective list of free APIs
497,123 starsmorluto/rea
Reverse engineer anything with agents, from app behavior down to native binaries.
441,991 starsopenclaw/openclaw
The AI that really does things. Any OS. Any Platform. The lobster way. 🦞
394,169 stars