UITableView套UITableView数据刷新

摘要:
YES:否;}当父控制器收到执行操作的通知时-changeSrollStatus{该通知允许父控件自行滚动。canScroll=YES;}当父控制器可以滚动时,将子控制器中的表视图设置为滚动。在代码中,设置属性以实现自我。childViewController。vcCanScroll=是;父控制器的scrollviewDelegate scrollViewDidsScroll:scrollView{CGFloatbottomCellOffset=[_gsTableViewrectForSection:1].gorigin.y-64;如果{scrollView.contentOffset=CGPointMake;如果{{self.canScroll=NO;self.childViewController.vcCanScroll=YES;}否则{if(!YES:NO;}set-setVcCanScroll:vcCanScroll{_vcCanScrScroll=vcCanScrew在子控制器Scroll中;}代码地址作者:codeShuai链接:https://www.jianshu.com/p/ee4b2bd54d08资料来源:本书版权归作者所有。对于任何形式的复制,请联系作者以获得授权并注明来源。

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

来源:简书

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

2017年11月16日 13:25:00 weixin_33912246 阅读数:8
 
 
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 

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

免责声明:文章转载自《UITableView套UITableView数据刷新》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Java OOM 常见情况sftp本地上传和远程下载下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

iOS-截取TableView生成图片

先看一下实例效果: 如果所示,这是一个在APP中截图,并调起微信客户端,发送给好友的例子,图片就是一个tableView的截图。 先实现一个小例子,如果tableVIew里面的内容,没有超过当前屏幕显示的区域,我们可以直接根据tableView的frame,生成一张图片 // 根据view生成图片 UIGraphicsBeginImageCo...

IOS 使用Autolayout实现UITableView的Cell动态布局和高度动态改变

如何在UITableViewCell中使用Autolayout来实现Cell的内容和子视图自动计算行高,并且能够保持平滑滚动的? 这个问题得到了300+的支持和450+的收藏,答案得到了730+的支持,很详细的说明了如何在iOS7和iOS8上实现UITableView的动态行高功能,并且这个答案对实现UICollectionView的动态行高也具有参考...

iOS蓝牙传输数据演示-3

蓝牙传输数据演示 在上一小节中,我们一起开发了基于蓝牙通讯的工具类,该类中详细的实现蓝牙连接流程中的每一个环节 本小节我们就以给小米手环发送数据使其震动来演示我们工具类的用法 工具类本身具有通用性,属于MVC中的M层,只负责处理自身负责的处理,不处理任何的业务逻辑和UI 我的小米手环的identifer:60C955B2-8F7C…… 后面我就不写了,...

ios基础之UITableViewCell的重用(带示例原创)

之前一个月刚刚系统的开始接触IOS开发,对UI控件大体了解了一遍,但是因为没有实际的参与项目,对细枝末节的还是不很清楚。 昨天突然想到:UITableViewCell的重用到底是怎么回事,上网查了许多资料后略有体会,但大都差不多,于是想自己实验一下。 便新建了个single view的工程,在storyboard上拖了个tableview,用最基础的方法绑...

iOS中上拉加载下拉刷新之MJRefresh

1.导入到自己的工程中,如果是非ACR,则需要-fno-objc-arc,如果是arc就不用管了。 一般的刷新都是基于UIScrollView的,因为能拖拽的view一般都是继承于UIScrollView。 2.#import “MJRefresh.h”   这个可以直接加载.m中 然后.h文件中: 1 #import <UIKit/UIKit.h&...

IOS 学习:UITableView 使用详解1

IOS 学习:UITableView 使用详解1 tableView作为最常见的视图之一在ios应用之中占有举足轻重的地位,因此学习tableView是非常重要的。这篇文章粗略的介绍tableView的创建过程和几个基本的委托方法。 1.添加委托和成员变量。 在视图控制器类的头文件当中,声明UITableView 指针变量table,数组datalList...