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
viewFrame
property, which make you free to customize your own size. -
You can put every controller in
WMPageController
,But if you want have aUICollectionViewController
in, please have an attention toUICollectionViewController's
init method.
You should override the- init
to giveUICollectionViewController
aUICollectionViewLayout
. 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.