WMPageController 2.5.2

WMPageController 2.5.2

测试已测试
语言语言 Obj-CObjective C
许可 MIT
发布日期上次发布2018年1月

Mark Wang 维护。



  • 作者
  • wangmchn

更多信息请见 中文介绍

Platform
License
CocoaPods Version

一个像网易新闻样式的页面控制器的简单解决方案

概述

更改日志

更多信息请见 更改日志

基本使用

创建一个继承自 WMPageController 的控制器。初始化 WMPageController 有两种方式:

使用类初始化

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

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

这里有以下几个重要属性:

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 中实现这些数据源方法。

自定义内容的框架

您可以通过以下方式轻松自定义控制器,只需实现这两个数据源方法。

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

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

当您想更改内容的框架时,需要调用 -forceLayoutSubViews 方法。这将调用上述数据源方法并重新布局子视图。
如果您感兴趣,请查看 viewFrameExample 获取更多信息。

使用 Storyboard/xib

1.如果您使用子控制器的类初始化 WMPageController,请覆盖 WMPageController的子控制器 中的 -init 方法,例如:

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

2.如果您使用数据源,只需实现以下 -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' 

注意

  1. 如果您在内容控制器的框架或大小时遇到任何问题,请尝试设置 viewFrame 属性,这将允许您自定义大小。

  2. 您可以将每个控制器放入 WMPageController 中,但如果您想在其中加入 UICollectionViewController,请注意 UICollectionViewController的 初始化方法。

    您应该覆盖 - init 方法以给 UICollectionViewController 一个 UICollectionViewLayout
    以下是一个示例:

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

许可

此项目采用 MIT 许可证。有关更多信息,请参阅 LICENSE 文件。