WMPageController, 像网易新闻这样的页面控制器的简单解决方案

分享于 

6分钟阅读

GitHub

  繁體
An easy solution to page controllers like NetEase News
  • 源代码名称:WMPageController
  • 源代码网址:http://www.github.com/wangmchn/WMPageController
  • WMPageController源代码文档
  • WMPageController源代码下载
  • Git URL:
    git://www.github.com/wangmchn/WMPageController.git
    Git Clone代码到本地:
    git clone http://www.github.com/wangmchn/WMPageController
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/wangmchn/WMPageController
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    WMPageController 中文介绍

    PlatformLicenseCocoaPods Version

    NetEase News 这样的页面控制器的简单解决方案

    概述

    更改日志

    有关更多信息,请参见变更日志

    基本用法

    创建从 WMPageController. There 扩展的控制器是初始化 WMPageController的两种方法:

    初始化类

    使用下面的构造函数初始化控制器:

    - (instancetype)initWithViewControllerClasses:(NSArray *)classes 
     andTheirTitles:(NSArray *)titles;

    下面是两个重要的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;
    
    
    
    
    使用数据源( 推荐这种方式)

    使用 UITableView 非常熟悉,这些方法需要实现:

    - (NSInteger)numbersOfChildControllersInPageController:(WMPageController *)pageController;
    - (__kindof UIViewController *)pageController:(WMPageController *)pageController viewControllerAtIndex:(NSInteger)index;
    - (NSString *)pageController:(WMPageController *)pageController titleAtIndex:(NSInteger)index;

    初始化后在WMPageController中实现这些数据源方法。

    自定义内容框架

    如下所示,你很容易定制控制器,只需实现这两个datasource方法。

    
    - (CGRect)pageController:(WMPageController *)pageController preferredFrameForContentView:(WMScrollView *)contentView;
    
    
    
    - (CGRect)pageController:(WMPageController *)pageController preferredFrameForMenuView:(WMMenuView *)menuView;
    
    
    
    

    当你想要更改contentView的帧时,你需要调用 -forceLayoutSubViews 方法。 这将回想起上面的datasource方法和subviews布局。 如果你感兴趣,请参阅 viewFrameExample 了解更多细节。

    使用 Storyboard/xib

    1.If 使用控制器的子类初始化 WMPageController,重写它的中的-init 方法 WMPageController's childViewController 例如:

    - (instancetype)init {
     return [selfinitWithNibName:@"xxxViewController"bundle:nil];
    }

    2.If,你正在使用数据源,只需实现 -pageController:viewControllerAtIndex: 如下所示:

    - (UIViewController *)pageController:(WMPageController *)pageController viewControllerAtIndex:(NSInteger)index {
     UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main"bundle:nil];
     UIViewController *vc = [sb instantiateViewControllerWithIdentifier:@"WMViewController"];
     return vc;
    }

    有关详细信息,请参阅 StoryboardExample

    样式

    通过设置可以轻松更改样式 xxxPageController.style = WMMenuViewStyleLine
    如果你希望 menuView 显示在导航栏上,请设置 .showOnNavigationBar = YES

    使用 CocoaPods

    如果你想要最新版本,请尝试 2.4.0 ( 这有一些API修改)

    
    pod 'WMPageController', '~> 2.4.0' 
    
    
    
    

    如果你喜欢老的,只要用 2.3.0就好了。

    
    pod 'WMPageController', '2.3.0' 
    
    
    
    

    注释

    如果你对控制器或者大小的内容框架有任何麻烦,只要尝试设置 viewFrame 属性,就可以自由定制你自己的大小。

    你可以将每个控制器放在 WMPageController 中,但如果你想要一个 UICollectionViewController,请注意 UICollectionViewController's init方法。
    你应该重写 - init 以给 UICollectionViewController 一个 UICollectionViewLayout。 以下是一个示例:

    - (instancetype)init {
     // init layout here... self = [selfinitWithCollectionViewLayout:layout];
     if (self) {
     // insert code here... }
     return self;
    }

    许可证

    这个项目在MIT许可下。 有关更多信息,请参阅许可证文件。


    相关文章