一個類似騰訊新聞的分頁控制器

先看效果圖:


ScreenCaptureProject3.gif

demo.gif

分頁控制器分兩部分,
一是分頁控制器,標題聯(lián)動,分為內(nèi)容頁和導航標題視圖,通過點擊和滾動來同步狀態(tài)。


#pragma mark - delegate
#pragma mark - 導航分類選擇代理 點擊標題滾動到相應(yīng)的界面
- (void)XSNavChooseView:(XSNavCouseChoseView *)chooseView clickItem:(id)itemModel withIndex:(NSInteger)index {
    
    CGFloat offsetX = index *self.view.frame.size.width;
    [_backScrollView setContentOffset:CGPointMake(offsetX,0)animated:NO];
    [self addChildVCWithIndex: index];

}

#pragma mark - ScroollView Delegate 拖動結(jié)束同步標題狀態(tài)
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
    
    if (![scrollView isKindOfClass:[UITableView class] ]) {
        CGPoint offset = scrollView.contentOffset;
        _navCoureCategoryView.currentBtnIndex = offset.x/self.view.frame.size.width;
        
        NSInteger index  = offset.x/self.view.frame.size.width;
        [self addChildVCWithIndex: index];
   }
}

所有的子控制器都是作為首頁的自控制器,并在界面顯示時候加載出來,支持標題的增減,不過至少保留一個首頁

標題改變時候只改變導航標題
- (void)setNavTitleAry:(NSMutableArray *)navTitleAry {
 
    _navTitleAry = navTitleAry;
    self.navCoureCategoryView.modelAry = navTitleAry;
    self.backScrollView.contentSize = CGSizeMake(self.view.frame.size.width * _navTitleAry.count, _backScrollView.frame.size.height);
    [_backScrollView setContentOffset:CGPointMake(0,0)animated:NO];

    // 導航欄數(shù)據(jù)變化移除子控制器
   [self.childViewControllers enumerateObjectsUsingBlock:^(__kindof UIViewController * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
       if (![obj isKindOfClass:[XSRecommendVC class]]) {
           //[self removeChild:obj];
           [obj removeFromParentViewController];
       }
   }];
}

只有視圖顯示,滾動或者點擊標題才添加到首頁
- (void)addChildVCWithIndex:(NSInteger )index {
    __block BOOL ishasVC = NO;
    [self.childViewControllers enumerateObjectsUsingBlock:^(__kindof UIViewController * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        
        if ([obj.title isEqualToString:_navTitleAry[index]]) {
            ishasVC = YES;
        }
    }];
    // 判斷是否存在自控制器, 沒有添加
    if (ishasVC == YES) {
        return;
    }
    NSString *titleName = _navTitleAry[index];
    XSCourseCategoryVC  *courseVC = [[XSCourseCategoryVC alloc] init];
    courseVC.view.frame = CGRectMake(self.view.frame.size.width * index, 0, self.view.frame.size.width, _backScrollView.frame.size.height);
    [_backScrollView addSubview:courseVC.view];
    courseVC.title = titleName;
    [self addChildViewController:courseVC];
}

二是分類選擇器,支持collectionView的增刪,拖動排序,原樣是一個仿騰訊新聞的頻道選擇器,我在原來的基礎(chǔ)上滿足需求做了修改,原作者做了詳細的說明,具體的請鏈接到:http://blog.csdn.net/u013282507/article/details/54374952

// 科目選擇器
- (void)pushToChooseCourseCategoryVC {
    typeof(self) weakSelf = self;
    [[XLChannelControl shareControl] showChannelViewWithInUseTitles:_navTitleAry unUseTitles:_unUserTitleAry finish:^(NSArray *inUseTitles, NSArray *unUseTitles, NSString *title, BOOL isChange) {
        
        if (isChange) {
            weakSelf.navTitleAry = inUseTitles.mutableCopy;
            weakSelf.unUserTitleAry = unUseTitles.mutableCopy;
        }
        
        if (title) {
            // 點擊 相應(yīng)標題跳轉(zhuǎn)到指定界面
            [weakSelf.navTitleAry enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
                if ([title isEqualToString:obj]) {
                    
                    [self addChildVCWithIndex:idx];
                    
                    weakSelf.navCoureCategoryView.currentBtnIndex = idx;
                    CGFloat offsetX = idx *weakSelf.view.frame.size.width;
                    [weakSelf.backScrollView setContentOffset:CGPointMake(offsetX,0)animated:NO];

                }
            }];
        }
    }];
}
Jietu20171018-232022@2x.jpg

Jietu20171018-232056@2x.jpg

GitHub地址:https://github.com/396987177/pageController.git

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容