// // RQPlaceDetailViewController.m // JiaPei // // Created by 张嵘 on 2023/4/17. // #import "RQPlaceDetailViewController.h" @interface RQPlaceDetailViewController () /// viewModel @property (nonatomic, readonly, strong) RQPlaceDetailViewModel *viewModel; @property (nonatomic, readwrite, strong) JXPagerView *pagerView; @property (nonatomic, readwrite, strong) JXCategoryTitleView *categoryView; @end @implementation RQPlaceDetailViewController @dynamic viewModel; #pragma mark - SystemMethod - (void)viewDidLoad { [super viewDidLoad]; /// 初始化 [self rq_setup]; } - (void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; self.pagerView.frame = CGRectMake(0, (RQ_APPLICATION_NAV_BAR_HEIGHT + QMUIHelper.statusBarHeightConstant), RQ_SCREEN_WIDTH, RQ_SCREEN_HEIGHT - (RQ_APPLICATION_NAV_BAR_HEIGHT + QMUIHelper.statusBarHeightConstant) - RQ_APPLICATION_SAFEAREA_BOTTOM_HEIGHT); } #pragma mark - PrivateMethods /// 初始化 - (void)rq_setup { // @weakify(self) /// set up ... [self.view addSubview:self.pagerView]; } #pragma mark - JXPagerViewDelegate - (UIView *)tableHeaderViewInPagerView:(JXPagerView *)pagerView { return [UIView new]; } - (NSUInteger)tableHeaderViewHeightInPagerView:(JXPagerView *)pagerView { return 0.f; } - (NSUInteger)heightForPinSectionHeaderInPagerView:(JXPagerView *)pagerView { return 54.f; } - (UIView *)viewForPinSectionHeaderInPagerView:(JXPagerView *)pagerView { return self.categoryView; } - (NSInteger)numberOfListsInPagerView:(JXPagerView *)pagerView { //和categoryView的item数量一致 return self.categoryView.titles.count; } - (id)pagerView:(JXPagerView *)pagerView initListAtIndex:(NSInteger)index { if (index == 0) { RQPlaceDetailNoteViewModel *placeDetailNoteViewModel = [[RQPlaceDetailNoteViewModel alloc] initWithServices:self.viewModel.services params:@{RQViewCommonValueKey : self.viewModel.placeListModel}]; RQPlaceDetailNoteViewController *placeDetailNoteViewController = [[RQPlaceDetailNoteViewController alloc] initWithViewModel:placeDetailNoteViewModel]; return placeDetailNoteViewController; } else { RQPlaceDetailDescribeViewModel *placeDetailDescribeViewModel = [[RQPlaceDetailDescribeViewModel alloc] initWithServices:self.viewModel.services params:@{}]; RQPlaceDetailDescribeViewController *placeDetailDescribeViewController = [[RQPlaceDetailDescribeViewController alloc] initWithViewModel:placeDetailDescribeViewModel]; return placeDetailDescribeViewController; } } #pragma mark - JXCategoryViewDelegate - (void)categoryView:(JXCategoryBaseView *)categoryView didSelectedItemAtIndex:(NSInteger)index { self.navigationController.interactivePopGestureRecognizer.enabled = (index == 0); self.viewModel.title = self.titles[index]; } - (void)categoryView:(JXCategoryBaseView *)categoryView didClickSelectedItemAtIndex:(NSInteger)index { } - (void)categoryView:(JXCategoryBaseView *)categoryView didScrollSelectedItemAtIndex:(NSInteger)index { } #pragma mark - JXPagerMainTableViewGestureDelegate - (BOOL)mainTableViewGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { if ([self checkIsNestContentScrollView:(UIScrollView *)gestureRecognizer.view] || [self checkIsNestContentScrollView:(UIScrollView *)otherGestureRecognizer.view]) { //如果交互的是嵌套的contentScrollView,证明在左右滑动,就不允许同时响应 return NO; } return [gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]] && [otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]; } - (BOOL)checkIsNestContentScrollView:(UIScrollView *)scrollView { // for (RQPlaceDetailNoteViewController *list in self.pagerView.validListDict.allValues) { // if (list.contentScrollView == scrollView) { // return YES; // } // } return NO; } #pragma mark - LazyLoad - (JXPagerView *)pagerView { if (!_pagerView) { _pagerView = [[JXPagerView alloc] initWithDelegate:self]; _pagerView.mainTableView.gestureDelegate = self; _pagerView.mainTableView.bounces = NO; _pagerView.listContainerView.categoryNestPagingEnabled = YES; _pagerView.listContainerView.frame = CGRectMake(0, 0, RQ_SCREEN_WIDTH, RQ_SCREEN_HEIGHT - (RQ_APPLICATION_NAV_BAR_HEIGHT + QMUIHelper.statusBarHeightConstant) - RQ_APPLICATION_TAB_BAR_HEIGHT - RQ_APPLICATION_SAFEAREA_BOTTOM_HEIGHT - 54.f); _pagerView.defaultSelectedIndex = 0; } return _pagerView; } - (JXCategoryTitleView *)categoryView { if (!_categoryView) { CGFloat width = (RQ_SCREEN_WIDTH - 100) / 2.f; CGFloat height = 54.f; CGFloat corner = 0.f; _categoryView = [[JXCategoryTitleView alloc] initWithFrame:CGRectMake(50, 20, RQ_SCREEN_WIDTH - 100, height)]; _categoryView.titles = self.titles; // _categoryView.backgroundColor = [UIColor qmui_colorWithHexString:@"#E3EDFC"]; _categoryView.titleSelectedColor = RQ_MAIN_TEXT_COLOR_1; _categoryView.titleColor = RQ_MAIN_TEXT_COLOR_2; _categoryView.titleFont = RQMediumFont(18); _categoryView.titleSelectedFont = RQMediumFont(18); _categoryView.titleColorGradientEnabled = YES; _categoryView.titleLabelZoomEnabled = NO; _categoryView.contentScrollViewClickTransitionAnimationEnabled = NO; _categoryView.titleLabelZoomSelectedVerticalOffset = 0.0f; // _categoryView.titleLabelVerticalOffset = 6.f; _categoryView.cellWidth = width; _categoryView.cellSpacing = 0; _categoryView.layer.cornerRadius = corner; // _categoryView.layer.borderWidth = 1; // _categoryView.layer.borderColor = [UIColor qmui_colorWithHexString:@"#AFCFFF"].CGColor; JXCategoryIndicatorLineView *backgroundView = [[JXCategoryIndicatorLineView alloc] init]; backgroundView.indicatorHeight = RQ_FIT_HORIZONTAL(4.f); backgroundView.indicatorWidth = RQ_FIT_HORIZONTAL(32.f); backgroundView.componentPosition = JXCategoryComponentPosition_Bottom; backgroundView.indicatorColor = RQ_MAIN_COLOR; _categoryView.indicators = @[backgroundView]; _categoryView.defaultSelectedIndex = 0; _categoryView.listContainer = (id)self.pagerView.listContainerView; _categoryView.delegate = self; } return _categoryView; } - (NSArray *)titles { return @[@"课程目录", @"课程描述"]; } @end