JXCategoryView框架的使用02(结合使用 JXPagerView)#

JXCategoryView框架的使用02(结合使用 JXPagerView)#

当前总行数:0 行

一些共同的准备工作

<JXCategoryTitleViewDataSource
,JXCategoryViewDelegate
,JXPagerViewDelegate>

Demo = JXPagerView + JXCategoryView

// @interface BaiShaETProjCollectionHeaderView : UICollectionHeaderFooterView

/// UI
@property(nonatomic,strong)UIButton *ruleBtn;
@property(nonatomic,strong)JXCategoryTitleView *categoryView;/// 文字
@property(nonatomic,strong)JXCategoryIndicatorLineView *lineView;/// 跟随的指示器
@property(nonatomic,strong)JXPagerView *pagerView;
@property(nonatomic,strong)BaiShaETProjCollectionHeaderView *collectionHeaderView;
/// Data
@property(nonatomic,strong)NSMutableArray <NSString *>*titleMutArr;
@property(nonatomic,strong)NSMutableArray <UIViewController *>*childVCMutArr;

#pragma mark - JXPagingViewDelegate

- (UIView *)tableHeaderViewInPagerView:(JXPagerView *)pagerView {
  return self.collectionHeaderView;
  }
  /**
  页面朝上走 crollView.contentOffset.y 为正值
  页面朝下走 crollView.contentOffset.y 为负值
  初始态是0
   */
- (void)pagerView:(JXPagerView *)pagerView
  mainTableViewDidScroll:(UIScrollView *)scrollView{
    [self.collectionHeaderView scrollViewDidScroll:scrollView.contentOffset.y];
  }
  /// 
- (NSUInteger)tableHeaderViewHeightInPagerView:(JXPagerView *)pagerView {
  return JobsStatusBarHeight()
  //    + self.gk_navigationBar.height
  + JobsNavigationBarAndStatusBarHeight(nil)
  + [BaiShaETProjCollectionHeaderView viewSizeWithModel:nil].height;
    }
    /// JXCategoryTitleView *categoryView 的高度
- (NSUInteger)heightForPinSectionHeaderInPagerView:(JXPagerView *)pagerView {
  return listContainerViewDefaultOffset;
  }

- (UIView *)viewForPinSectionHeaderInPagerView:(JXPagerView *)pagerView {
  return self.categoryView;
  }

- (NSInteger)numberOfListsInPagerView:(JXPagerView *)pagerView {
  return self.titleMutArr.count;
  }

- (id<JXPagerViewListViewDelegate>)pagerView:(JXPagerView *)pagerView
      initListAtIndex:(NSInteger)index {
  return self.childVCMutArr[index];
  }
  #pragma mark —— lazyLoad
  -(JXPagerView *)pagerView{
  if (!_pagerView) {
      _pagerView = [JXPagerView.alloc initWithDelegate:self];
      [self.view addSubview:_pagerView];
      _pagerView.frame = CGRectMake(0,
                                    JobsNavigationBarAndStatusBarHeight(nil) + self.getTopLineLabSize.height,
                                    JobsMainScreen_WIDTH(),
                                    JobsMainScreen_HEIGHT());
      _pagerView.pinSectionHeaderVerticalOffset = JobsWidth(0);/// 额外的偏移量
  }return _pagerView;
  }

-(BaiShaETProjCollectionHeaderView *)collectionHeaderView{
    if (!_collectionHeaderView) {
        _collectionHeaderView = BaiShaETProjCollectionHeaderView.new;
        _collectionHeaderView.frame = CGRectMake(0,
                                                 JobsNavigationBarAndStatusBarHeight(nil),
                                                 [BaiShaETProjCollectionHeaderView viewSizeWithModel:nil].width,
                                                 [BaiShaETProjCollectionHeaderView viewSizeWithModel:nil].height);
        _collectionHeaderView.isZoom = YES;
        [_collectionHeaderView richElementsInViewWithModel:nil];
    }return _collectionHeaderView;
}

-(JXCategoryTitleView *)categoryView{
    if (!_categoryView) {
        _categoryView = JXCategoryTitleView.new;
        _categoryView.backgroundColor = UIColor.clearColor;
        _categoryView.titleSelectedColor = HEXCOLOR(0xAE8330);
        _categoryView.titleColor = HEXCOLOR(0x757575);
        _categoryView.titleFont = notoSansBold(12);
        _categoryView.titleSelectedFont = notoSansBold(12);
        _categoryView.delegate = self;
        _categoryView.titles = self.titleMutArr;
        _categoryView.titleColorGradientEnabled = YES;
        _categoryView.indicators = @[self.lineView];//
        _categoryView.defaultSelectedIndex = 1;// 默认从第二个开始显示
        _categoryView.cellSpacing = JobsWidth(-20);
        _categoryView.listContainer = (id<JXCategoryViewListContainer>)self.pagerView.listContainerView;
        [self.view addSubview:_categoryView];
        [self.view layoutIfNeeded];
    }return _categoryView;
}

-(JXCategoryIndicatorLineView *)lineView{
    if (!_lineView) {
        _lineView = JXCategoryIndicatorLineView.new;
        _lineView.indicatorColor = HEXCOLOR(0xAE8330);
        _lineView.indicatorHeight = JobsWidth(4);
        _lineView.indicatorWidthIncrement = JobsWidth(10);
        _lineView.verticalMargin = 0;
    }return _lineView;
}

-(UIButton *)ruleBtn{
    if (!_ruleBtn) {
        _ruleBtn = UIButton.new;
        _ruleBtn.normalTitleColor = HEXCOLOR(0x3D4A58);
        _ruleBtn.normalTitle = JobsInternationalization(@"VIP規則");
        _ruleBtn.titleFont = notoSansRegular(12);
        BtnClickEvent(_ruleBtn, {
            [self comingToPushVC:BaiShaETProjRuleDetailVC.new requestParams:UIViewModel.new];
        });
    }return _ruleBtn;
}

-(NSMutableArray<NSString *> *)titleMutArr{
    if (!_titleMutArr) {
        _titleMutArr = NSMutableArray.array;
        for (int i = 0; i <= 5; i++) {
            [_titleMutArr addObject:JobsInternationalization([@"Lv" stringByAppendingString:[NSString stringWithFormat:@"%d",i]])];
        }
    }return _titleMutArr;
}

-(NSMutableArray<UIViewController *> *)childVCMutArr{
    if (!_childVCMutArr) {
        _childVCMutArr = NSMutableArray.array;
        for (NSString *str in self.titleMutArr) {
            BaiShaETProjVIPSubVC *vipSubVC = BaiShaETProjVIPSubVC.new;
            vipSubVC.jobsTag = [self.titleMutArr indexOfObject:str];
            [self.childVCMutArr addObject:vipSubVC];
        }
    }return _childVCMutArr;
}

用JXPagerView管理的区别:

 1、注册协议JXPagerViewDelegate、舍弃协议JXCategoryListContainerViewDelegate
    1.1、舍弃 : - (NSInteger)numberOfListsInlistContainerView:(JXCategoryListContainerView *)listContainerView;
    1.2、舍弃: - (id<JXCategoryListContentViewDelegate>)listContainerView:(JXCategoryListContainerView *)listContainerView initListForIndex:(NSInteger)index;
    1.3、舍弃: - (void)categoryView:(JXCategoryBaseView *)categoryView didClickSelectedItemAtIndex:(NSInteger)index ;
    1.4、舍弃: - (void)categoryView:(JXCategoryBaseView *)categoryView didSelectedItemAtIndex:(NSInteger)index ;
    1.5、舍弃: - (void)categoryView:(JXCategoryBaseView *)categoryView didScrollSelectedItemAtIndex:(NSInteger)index;
    1.6、舍弃: - (void)categoryView:(JXCategoryBaseView *)categoryView
            scrollingFromLeftIndex:(NSInteger)leftIndex
                   toRightIndex:(NSInteger)rightIndex
                         ratio:(CGFloat)ratio ;
 2、舍弃属性类 JXCategoryListContainerView
    2.1、舍弃 @property(nonatomic,strong)JXCategoryListContainerView *listContainerView;/// 此属性决定依附于此的viewController@property(nonatomic,strong)
    2.1 、舍弃
 -(JXCategoryListContainerView *)listContainerView{
     if (!_listContainerView) {
         _listContainerView = [JXCategoryListContainerView.alloc initWithType:JXCategoryListContainerType_CollectionView
                                                                     delegate:self];
         _listContainerView.defaultSelectedIndex = 1;// 默认从第二个开始显示
         [self.view addSubview:_listContainerView];
         [_listContainerView mas_makeConstraints:^(MASConstraintMaker *make) {
 //            make.edges.equalTo(self.view);
             make.top.equalTo(self.topLineLab.mas_bottom).offset(listContainerViewDefaultOffset);
             make.left.right.bottom.equalTo(self.view);

         }];
         [self.view layoutIfNeeded];
 //        /// ❤️在需要的地方写❤️
 //        NSNumber *currentIndex = [self.listContainerView valueForKey:@"currentIndex"];
 //        NSLog(@"滑动或者点击以后,改变控制器,得到的目前最新的index = %d",currentIndex.intValue);

     }return _listContainerView;
 }

 3JXCategoryTitleView 舍弃部分属性:
    3.1、舍弃:_categoryView.contentScrollView = self.listContainerView.scrollView;/// 关联cotentScrollView,关联之后才可以互相联动!!!
    3.2、在 JXPagerView 模式下 ,不用设置JXCategoryTitleView的heightsizeframe。而是在JXPagingViewDelegate代理方法里面设置

 4_categoryView新增属性_categoryView.listContainer = (id<JXCategoryViewListContainer>)self.pagerView.listContainerView;
 5、全局新增属性:@property(nonatomic,strong)JXPagerView *pagerView;
 6、新增JXPagingViewDelegate代理协议的实现
     6.1- (UIView *)tableHeaderViewInPagerView:(JXPagerView *)pagerView;
     6.2- (void)pagerView:(JXPagerView *)pagerView
        mainTableViewDidScroll:(UIScrollView *)scrollView;
     6.3- (NSUInteger)tableHeaderViewHeightInPagerView:(JXPagerView *)pagerView ;
     6.4- (NSUInteger)heightForPinSectionHeaderInPagerView:(JXPagerView *)pagerView;/// JXCategoryTitleView *categoryView 的高度
     6.5- (UIView *)viewForPinSectionHeaderInPagerView:(JXPagerView *)pagerView;
     6.6- (NSInteger)numberOfListsInPagerView:(JXPagerView *)pagerView;
     6.7- (id<JXPagerViewListViewDelegate>)pagerView:(JXPagerView *)pagerView
                                  initListAtIndex:(NSInteger)index;
 7、各个子VC要遵循代理协议JXPagerViewListViewDelegate,并实现相关方法
    7.1 - (UIView *)listView;
    7.2 - (UIScrollView *)listScrollView;
    7.3 - (void)listViewDidScrollCallback:(void (^)(UIScrollView *scrollView))callback;
    7.4、或者直接导入类:#import "UIViewController+JXPagerViewListViewDelegate.h"