UITableView(UICollectionView)嵌套UITableView(UICollectionView

最近项目中用到了滚动视图嵌套滚动视图,此功能做完了,就做个记录。

其实核心思路就是在滑动视图的时候需要主滚动视图和子滚动视图都可以收到滚动事件。然后在指定的位置控制主视图以及子视图是否让其继续滚动即可。

例如本demo中MainTableView实现如下:

MainTableView继承自UITableView,.m实现如下方法,可以让事件传递下去

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
   if ([otherGestureRecognizer.view isKindOfClass:[MainScrollView class]]) {
        return NO;
    }
    return YES;
}

然后控制器里边创建MainTableView对象并实现代理,然后就是实现滚动:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    self.view.backgroundColor = [UIColor whiteColor];
    self.title = @"";
    self.canScroll = YES;
    
    [self.view addSubview:self.tableView];
    
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeScrollStatus) name:@"mainCanScroll" object:nil];
}

// 主视图可以滚动的通知
- (void)changeScrollStatus{
    self.canScroll = YES;
    self.subCell.cellCanScroll = NO;
}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
    CGFloat bottomCellOffset = [self.tableView rectForSection:1].origin.y;
    if (scrollView.contentOffset.y >= bottomCellOffset) {   // 第二个sectionHeaderView滑动到顶部
        scrollView.contentOffset = CGPointMake(0, bottomCellOffset);
        self.canScroll = NO;
        self.subCell.cellCanScroll = YES;
    }else{
        if (!self.canScroll) {
            scrollView.contentOffset = CGPointMake(0, bottomCellOffset);
        }
    }
}

子滚动视图实现如下:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
    if (_canScroll) {
        NSLog(@"😄😄😄😄😄😄😄😄");
    }else{
        _tableview.contentOffset = CGPointZero;
    }
    if (_tableview.contentOffset.y < 0) {
        _canScroll = NO;
        _tableview.contentOffset = CGPointZero;
        [[NSNotificationCenter defaultCenter] postNotificationName:@"mainCanScroll" object:nil];//到顶通知父视图改变状态
    }
}

根据指定的位置来控制当前滚动主视图还是子视图,可以下载demo具体运行感受一下。

本人博客原文地址
demo地址

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 用到的组件 1、通过CocoaPods安装 2、第三方类库安装 3、第三方服务 友盟社会化分享组件 友盟用户反馈 ...
    SunnyLeong阅读 14,976评论 1 180
  • 16宿命:用概率思维提高你的胜算 以前的我是风险厌恶者,不喜欢去冒险,但是人生放弃了冒险,也就放弃了无数的可能。 ...
    yichen大刀阅读 11,312评论 0 4
  • 公元:2019年11月28日19时42分农历:二零一九年 十一月 初三日 戌时干支:己亥乙亥己巳甲戌当月节气:立冬...
    石放阅读 11,822评论 0 2

友情链接更多精彩内容