WMPageController 中文介绍
An easy solution to page controllers like NetEase News
Click here: https://github.com/wangmchn/WMPageController-Swift
- Drag files in red frame to your project.
- Create an controller extends from
WMPageController
.There are two ways to init theWMPageController
:
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 three datasource methods in YOUR WMPageController after initialize it.
To have a custom page controller,please set the properties in WMPageController
,They are: titleSize
, titleColor
, menuHeight
, pageAnimatable
, menuBGColor
, menuItemWidth
,and also itemsWidths
.
It's easy for you to customize your controller as following, just set viewFrame
and done.
See ViewFrameDemo for more information.
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;
}
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
;
pod 'WMPageController'
-
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.