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
 
 
error.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数据刷新的更多相关文章

  1. iOS-UI控件之UITableView(四)- cell数据刷新

    TableView- 数据刷新 数据刷新 添加数据 删除数据 更改数据 全局刷新方法(最常用) [self.tableView reloadData]; // 屏幕上的所有可视的cell都会刷新一遍 ...

  2. popViewControllerAnimated 后,对页面内UITableView 内数据刷新

    popViewControllerAnimated后,这时它不执行viewDidLoad,所以不能及时对viewControler及时刷新,此时对该页面进行操作可以调用viewWillAppear:( ...

  3. iOS开发UI篇—实现UItableview控件数据刷新

    iOS开发UI篇—实现UItableview控件数据刷新 一.项目文件结构和plist文件 二.实现效果 1.说明:这是一个英雄展示界面,点击选中行,可以修改改行英雄的名称(完成数据刷新的操作). 运 ...

  4. IOS第七天(3:UiTableView 模型和数据的分组的显示)

    *************UiTableView模型和数据的分组的显示 #import "HMViewController.h" #import "HMHero.h&qu ...

  5. uitableview分组的数据2中方式

    // // ViewController.m // tableviegroup // // Created by ganchaobo on 13-7-2. // Copyright (c) 2013年 ...

  6. IOS tableView的数据刷新

    1.tableView的刷新 1> 数据刷新的总体步骤 * 修改模型数据 * 刷新表格(刷新界面) 2> 刷新表格(刷新界面)的方法 * 全局刷新(每一行都会重新刷新) - (void)r ...

  7. IOS开发UI基础--数据刷新

    IOS开发UI基础--数据刷新 cell的数据刷新包括下面几个方面 加入数据 删除数据 更改数据 全局刷新方法(最经常使用) [self.tableView reloadData]; // 屏幕上的全 ...

  8. PowerBI开发 第七篇:数据集和数据刷新

    PowerBI报表是基于数据分析的引擎,数据真正的来源(Data Source)是数据库,文件等数据存储媒介,PowerBI支持的数据源类型多种多样.PowerBI Service(云端)有时不直接访 ...

  9. RecyclerView 数据刷新的几种方式 局部刷新 notify MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

随机推荐

  1. Mysql的NULL和Empty String

    本文基于Mysql5.7版本的参考资料: https://dev.mysql.com/doc/refman/5.7/en/working-with-null.html https://dev.mysq ...

  2. Oracl数据库+PL/SQL安装与配置

    资源位置:百度网盘/Oracle+PL/SQL 一.Oracle安装与配置 Oracle 11g 最好安装在Win7上,Win10会有各种不兼容问题. 先安装Oracle数据库,database数据库 ...

  3. NodeJS二进制包安装和快捷键配置(适用于U盘版安装配置)

    首先下载NodeJS二进制安装包:https://nodejs.org/dist/v10.15.3/node-v10.15.3-win-x64.zip 在D盘新建NodeJS文件夹,解压node-v1 ...

  4. C++多线程同步技巧(一) --- 临界区

    简介 C++中关于多线程的内容对于构建工程来说是至关重要的,C++本身也对关于多线程的操作提供了很好的支持.本章笔者就来介绍一下C++有关于多线程的重要知识点---临界区. 临界区的作用 线程就像是进 ...

  5. March 11th, 2018 Week 11th Sunday

    All good things must come to an end. 好景无常. Love is when the other person's happiness is more importa ...

  6. (转)Spring Boot(七):Mybatis 多数据源最简解决方案

    http://www.ityouknow.com/springboot/2016/11/25/spring-boot-multi-mybatis.html 说起多数据源,一般都来解决那些问题呢,主从模 ...

  7. C#事件の事件访问器

    在真实的项目中,有的对象有相当多的事件,例如一个窗体就有好多种事件.默认情况下,当声明事件时,编译器将内存分配给一个事件字段,一存储事件信息.如果类中有好多事件未使用,则他们会不必要的占用内存. 这种 ...

  8. 解决VS Code使用code runner开发Python乱码问题

    微软开发的VS Code是一个跨平台的文本编辑器,通过各种插件,可以把自己武装成无所不能的IDE. 刚刚安装完VS Code时,迫不急待地安装了C/C++.Python以及Code Runner插件, ...

  9. ORACLE直方图(10g)

    为什么需要直方图 ?当表中一列数据比较的值分布比较均匀时,optimzer可以很好的通过最大值,最小值和NDV(唯一值的个数),就可以判断出cardinality.对于cardinality越精确,o ...

  10. 【转】Windows系统中ckplayer视频边下边放,视频转码mp4及"last atom in file was not a moov atom"问题

    视频转码成mp4格式并添加关键帧: 1.先下载与自己操作系统相对应的的FFmpeg软件.官网传送门:http://ffmpeg.zeranoe.com/builds/ 下载static版的就可以,zi ...