Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/wangmchn/WMPageController
An easy solution to page controllers like NetEase News
https://github.com/wangmchn/WMPageController
Last synced: 3 months ago
JSON representation
An easy solution to page controllers like NetEase News
- Host: GitHub
- URL: https://github.com/wangmchn/WMPageController
- Owner: wangmchn
- License: mit
- Created: 2015-06-14T13:18:36.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2023-08-23T04:21:23.000Z (about 1 year ago)
- Last Synced: 2024-05-17T19:43:08.815Z (6 months ago)
- Language: Objective-C
- Homepage:
- Size: 21.4 MB
- Stars: 2,919
- Watchers: 70
- Forks: 627
- Open Issues: 291
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
- Awesome-iOS - WMPageController - An easy solution to page controllers like NetEase News (UI Components)
README
# WMPageController [中文介绍](https://github.com/wangmchn/WMPageController/blob/master/README_zh-CN.md)
[![Platform](http://img.shields.io/badge/platform-iOS-blue.svg?style=flat
)](https://developer.apple.com/iphone/index.action)
[![License](http://img.shields.io/badge/license-MIT-lightgrey.svg?style=flat
)](http://mit-license.org)
![CocoaPods Version](https://img.shields.io/badge/pod-v0.36.4-brightgreen.svg)An easy solution to page controllers like `NetEase News`
## Overview## Change Log
See [CHANGELOG](https://github.com/wangmchn/WMPageController/blob/master/CHANGELOG.md) 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:
```objective-c
- (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:
```objective-c
- (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:
```objective-c
- (instancetype)init {
return [self initWithNibName:@"xxxViewController" bundle:nil];
}
```
2.If you are using datasource, Just implement `-pageController:viewControllerAtIndex:` as following:
```objective-c
- (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
1. 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.2. You can put every controller in `WMPageController`,But if you want have a `UICollectionViewController` in, please have an attention to `UICollectionViewController's` init method.
You should override the `- init` to give `UICollectionViewController` a `UICollectionViewLayout`.
Here is an example:
```objective-c
- (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.