最近做项目的时候,用到了顶部选项卡和底部分页控制器相关的功能。之前做的话都是自己手动封装,通过两个UIScrollView联动来实现。公司同事给推荐了一个封装好的库,
TYPagerController,内部也是通过ScrollView的联动来实现的,不过功能确实很强大。有幸研究使用了一下,小结分享备用。
第一步,当然是导入相应的库文件,引用相关的头文件
#import <TYPagerController/TYPagerController.h>
#import <TYPagerController/TYTabPagerBar.h>
,现在用的多的是pod导入;
第二步,就是具体的用法了。引入相关的协议,定义实例变量。
@property (nonatomic, strong) TYTabPagerBar *tabPagerBar;
@property (nonatomic, strong) TYPagerController *pagerController;
-(TYTabPagerBar *)tabPagerBar{
//顶部bar
if (!_tabPagerBar) {
_tabPagerBar = [[TYTabPagerBar alloc]init];
_tabPagerBar.layout.barStyle = TYPagerBarStyleProgressElasticView;
_tabPagerBar.layout.cellSpacing = 20;
_tabPagerBar.layout.cellEdging = 0;
_tabPagerBar.layout.normalTextFont = K_CC_FONT(16);
_tabPagerBar.layout.selectedTextFont = K_CC_FONT_SEMIBOLD(18);
_tabPagerBar.layout.normalTextColor = K_CC_COLOR_STRING(@"#666666");
_tabPagerBar.layout.selectedTextColor = K_CC_COLOR_STRING(@"#6294FF");//K_CC_COLOR_BLUE;
_tabPagerBar.layout.adjustContentCellsCenter = YES;
_tabPagerBar.layout.progressColor = K_CC_COLOR_STRING(@"#6294FF");
_tabPagerBar.layout.textColorProgressEnable=YES;
_tabPagerBar.dataSource = self;
_tabPagerBar.delegate = self;
[_tabPagerBar registerClass:[TYTabPagerBarCell class] forCellWithReuseIdentifier:[TYTabPagerBarCell cellIdentifier]];
}
return _tabPagerBar;
}
-(TYPagerController *)pagerController{
//内容controller
if (!_pagerController) {
_pagerController = [[TYPagerController alloc]init];
_pagerController.layout.prefetchItemCount = 0;//预加载个数
//pagerController.layout.autoMemoryCache = NO;
// 只有当scroll滚动动画停止时才加载pagerview,用于优化滚动时性能
_pagerController.layout.addVisibleItemOnlyWhenScrollAnimatedEnd = YES;
_pagerController.automaticallySystemManagerViewAppearanceMethods = NO;
_pagerController.dataSource = self;
_pagerController.delegate = self;
_pagerController.view.backgroundColor = K_CC_GRAY_BG_COLOR;
_pagerController.scrollView.backgroundColor = K_CC_GRAY_BG_COLOR;
}
return _pagerController;
}
- (UIViewController *)pagerController:(TYPagerController *)pagerController controllerForIndex:(NSInteger)index prefetching:(BOOL)prefetching {
CCHighSeasPoolListViewController *VC = [[CCHighSeasPoolListViewController alloc]init];
//此处需要区分普通用户和管理员
if ([self.marketSeaRole isEqualToString:@"normal"]) {
if (index== 0) {
VC.condition=@"未分配";
}else if (index== 1) {
VC.condition=@"已分配";
}else if (index== 2) {
//客户公海池
if ([self.itemtitle isEqualToString:@"acf202011accmksea"]) {
VC.condition=@"已成交";
}else{
VC.condition=@"已成交";
}
}else {
VC.condition=@"自建";
}
}else{//管理员
if (index== 0) {
VC.condition=@"未分配";
}else if (index== 1) {
VC.condition=@"已分配";
}else if (index== 2) {
VC.condition=@"已废弃";
}else if (index== 3) {
//客户公海池
if ([self.itemtitle isEqualToString:@"acf202011accmksea"]) {
VC.condition=@"已成交";
}else{
VC.condition=@"已成交";
}
}else {
VC.condition=@"自建";
}
}
VC.itemtitle=self.itemtitle;
CCMoreListModel *moreModel=[self.dataSeasList objectAtIndex:self.currentSeasItem];
VC.marketSeaId=moreModel.ID;
VC.dataButtonList=self.dataButtonList;
VC.dataSeasLeftList=self.dataSeasLeftList;
VC.querysize=self.querysize;
VC.marketSeaRole=self.marketSeaRole;
VC.dataSeasPoolList=self.dataSeasList;
return VC;
}
最核心的地方基本就是这些,它强大的地方有三点,一是我可以上下联动,并返回当前选中项索引,可以通过通知刷新相关联的页面;二是我可以动态的设置顶部选项卡的个数,对应文本的大小和颜色;三是,底部可以加载view或者controller。使用过程中遇到的问题主要是,当前版本库里面选中项对应的加粗属性,作者用错变量了,需要去库文件手动改一下;