zoukankan      html  css  js  c++  java
  • UITableView套UITableView数据刷新

    https://www.jianshu.com/p/ee4b2bd54d08

    网上关于tableview嵌套tableview的文章很多,纵览很多后发现有两点没有满足需求

    把两个tableview放在一个控制器中这样对大批量的数据处理不够友好

    没有做到tableview互斥滚动(只有一个可以滚动)

    主要的一点

    在父控制器的tableview的GSTableview.m文件中实现这个方法

    /**

     同时识别多个手势

     @param gestureRecognizer gestureRecognizer description

     @param otherGestureRecognizer otherGestureRecognizer description

     @return return value description

     */

    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

    {

        return YES;

    }

    实现的原理是

    当子控制器中的tableview偏移量<=0 的时候让这个tableview不能滚动  代码表示为 scrollView.contentOffset = CGPointZero;  并且通知父控制器可以滚动

    - (void)scrollViewDidScroll:(UIScrollView *)scrollView{

        NSLog(@"scrollView.contentOffset.y===   %f",scrollView.contentOffset.y);

        // 只有控制这个tableview的滑动才可以 实现下拉刷新 所以设置scrollView.contentOffset = CGPointZero

        // 向下拖动  scrollView.contentOffset.y 值小于零

        //  vcCanScroll 从上一个控制器传递过来

        if (!_vcCanScroll) {

           scrollView.contentOffset = CGPointZero;

            

        }

        if (scrollView.contentOffset.y <= 0) {

            _vcCanScroll = NO;

            // 到顶通知父视图改变状态  用于有多个同级的控制器  用来设置所有控制器中的tableview 偏移量设置为 CGPointZero  还有就是设置父控制器中tableview的  canScroll;

             scrollView.contentOffset = CGPointZero;

            [[NSNotificationCenter defaultCenter] postNotificationName:@"leaveTop" object:nil];

            

        }

        // 设置是否显示垂直滚动条 VerticalScrollIndicator

        self.tableView.showsVerticalScrollIndicator =_vcCanScroll?YES:NO;

        

    }

    父控制器在接受到通知执行的操作

    - (void)changeSrollStatus{

    通知让父控件可以滚动

        self.canScroll = YES;

    }

    当父控制器可以滚动的时候 设置子控制器中tableview 不能滚动  代码中是通过设置属性来实现的  self.childViewController.vcCanScroll = YES;

    父控制器的scrollviewDelegate

    - (void)scrollViewDidScroll:(UIScrollView *)scrollView{

        CGFloat bottomCellOffset = [_gsTableView rectForSection:1].origin.y - 64;

        if (scrollView.contentOffset.y >= bottomCellOffset) {

            scrollView.contentOffset = CGPointMake(0, bottomCellOffset);

            

            if (self.canScroll) {

                self.canScroll = NO;

                self.childViewController.vcCanScroll = YES;

              

            }

        }else{

            if (!self.canScroll) {

                scrollView.contentOffset = CGPointMake(0, bottomCellOffset);

            }

        }

        self.gsTableView.showsVerticalScrollIndicator = _canScroll?YES:NO;

    }

    子控制器中设置

    - (void)setVcCanScroll:(BOOL)vcCanScroll{

        _vcCanScroll = vcCanScroll;

    }

    代码地址

    作者:codeShuai

    链接:https://www.jianshu.com/p/ee4b2bd54d08

    来源:简书

    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

     
    662374-878970908d46ae99.gif
    error.gif
     
    662374-c2406953c749f245.gif
    right.gif
     

    造成闪烁的原因,主要是因为CALayer有一个隐式动画,只要在调用reloadData刷新时,关闭隐式动画就可以避免了。代码示例如下:

    [CATransaction setDisableActions:YES];

    [self.collectionView reloadData];

    [CATransaction commit];

    --------------------- 

    作者:weixin_33912246 

    来源:CSDN 

    原文:https://blog.csdn.net/weixin_33912246/article/details/87000284 

    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    使用OpenSSL自建CA + Nginx配置HTTPS
    Windows安装pycrypto失败记录
    在Scrapy项目【内外】使用scrapy shell命令抓取 某网站首页的初步情况
    计算机类学术论文 28个常见出版社一般写法(参考文献用)
    自然语言处理的CNN模型中几种常见的池化方法
    自然语言处理相关项目列表(2018/02/05更新)
    【原创】python嗅探QQ消息实战
    pynlpir 报错 Cannot Save user dictionary 原因与解决方法
    开发文档之 概要设计说明书 详细设计说明书 数据库设计说明书
    爬取大众点评美食频道店铺信息实践
  • 原文地址:https://www.cnblogs.com/sundaysgarden/p/10543794.html
Copyright © 2011-2022 走看看