iOS-分页控制器
使用:
1、创建方法
1.1 导入头文件
#import "XLPageViewController.h"
1.2 遵守协议
@interface ViewController ()<XLPageViewControllerDelegate, XLPageViewControllerDataSrouce>
1.3 创建外观配置类
注:config负责所有的外观配置,defaultConfig
方法设定了默认参数,使用时可按需配置。 →Config属性列表
XLPageViewControllerConfig *config = [XLPageViewControllerConfig defaultConfig];
1.4 创建分页控制器
注:需要把pageViewController
添加为当前视图控制器的子视图控制器,才能实现子视图控制器中的界面跳转。
XLPageViewController *pageViewController = [[XLPageViewController alloc] initWithConfig:config];
pageViewController.view.frame = self.view.bounds;
pageViewController.delegate = self;
pageViewController.dataSource = self;
[self.view addSubview:pageViewController.view];
[self addChildViewController:pageViewController];
2、协议
2.1 XLPageViewControllerDelegate
//回调切换位置
- (void)pageViewController:(XLPageViewController *)pageViewController didSelectedAtIndex:(NSInteger)index;
2.2 XLPageViewControllerDataSrouce
@required
//根据index创建对应的视图控制器,每个试图控制器只会被创建一次。
- (UIViewController *)pageViewController:(XLPageViewController *)pageViewController viewControllerForIndex:(NSInteger)index;
//根据index返回对应的标题
- (NSString *)pageViewController:(XLPageViewController *)pageViewController titleForIndex:(NSInteger)index;
//返回分页数
- (NSInteger)pageViewControllerNumberOfPage;
@optional
//标题cell复用方法,自定义标题cell时用到
- (__kindof XLPageTitleCell *)pageViewController:(XLPageViewController *)pageViewController titleViewCellForItemAtIndex:(NSInteger)index;
3、自定义标题cell
3.1 创建一个XLPageTitleCell
的子类
#import "XLPageTitleCell.h"
@interface CustomPageTitleCell : XLPageTitleCell
@end
3.2 注册cell、添加创建cell
//需要先注册cell
[self.pageViewController registerClass:CustomPageTitleCell.class forTitleViewCellWithReuseIdentifier:@"CustomPageTitleCell"];
//自定义标题cell创建方法
- (XLPageTitleCell *)pageViewController:(XLPageViewController *)pageViewController titleViewCellForItemAtIndex:(NSInteger)index {
CustomPageTitleCell *cell = [pageViewController dequeueReusableTitleViewCellWithIdentifier:@"CustomPageTitleCell" forIndex:index];
return cell;
}
3.3 复写cell父类方法
//通过此父类方法配置标题cell是否被选中样式
- (void)configCellOfSelected:(BOOL)selected {
}
//通过此父类方法配置标题cell动画;type:区分是当前选中cell/将要被选中的cell;progress:动画进度0~1
- (void)showAnimationOfProgress:(CGFloat)progress type:(XLPageTitleCellAnimationType)type {
}
4、特殊情况处理
4.1 和子view手势冲突问题
当pageViewController
的子视图中存在可滚动的子view,例如UISlider、UIScrollView等,如果子view和pageViewController
发生滚动冲突时,可设置子view的xl_letMeScrollFirst
属性为true。
UISlider *slider = [[UISlider alloc] init];
slider.xl_letMeScrollFirst = true;
[childVC.view addSubview:slider];
4.2 全屏返回手势问题
当pageViewController
和全屏返回手势一起使用时,需要将其它手势的delegate的类名添加到respondOtherGestureDelegateClassList
属性中。当滚动到第一个分页时,向右滑动会优先响应全屏返回。以FDFullscreenPopGesture为例:
self.pageViewController.respondOtherGestureDelegateClassList = @[@"_FDFullscreenPopGestureRecognizerDelegate"];
5、注意事项
使用时需注意标题不要重复,标题是定位ViewController的唯一ID。
源码下载:XLPageViewController-master.zip
常见问题及demo:https://github.com/mengxianliang/XLPageViewController