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. Linux学习历程——Centos 7 ps命令基础

    一.ps命令介绍 ps命令是Process Status的缩写,用于查看系统进程状态,ps命令输出值非常多,通常结合管道符使用. 二.实例 1.我们直接输入ps命令,不加任何参数. 可以看到默认输出4 ...

  2. inline-block,一个奇怪的问题:中间div掉下来

    先上代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <tit ...

  3. Linux的基础命令

    -shutdown –h now(root用户才有效)     立即关机 -shutdown –r now(root用户才有效)     立即重新启动计算机 -reboot               ...

  4. CF700E Cool Slogans

    CF700E Cool Slogans 题目描述 给出一个长度为n的字符串\(s[1]\),由小写字母组成.定义一个字符串序列\(s[1....k]\),满足性质:\(s[i]\)在\(s[i-1] ...

  5. 在 Linux 中自动配置 IPv6 地址

    在 Linux 中自动配置 IPv6 地址 在本文中,我们将学习如何为 ULA 自动配置 IP 地址. 何时使用唯一本地地址 唯一本地地址unique local addresses(ULA)使用 f ...

  6. SPA游标采集之去除重复

    注:转:http://shsnc2014.blog.163.com/blog/static/2403690822014102411217903/ 当我们做数据库升级项目的时候,我们一般会去做性能回归测 ...

  7. 如何在关闭ssh连接的情况下,让进程继续运行?

    #screen 1 回车后进入Screen子界面,此时putty标题栏会指示处于子界面状态,然后运行你的程序 #应用程序名 1 然后按下Ctrl+A后抬起,然后按下d键,此时切换回主界面,Putty的 ...

  8. python3 生成器和生成器表达式

    ''' 生成器:函数中有yield就是生成器函数 生成器本质是一个迭代器 yield后面的值会作为返回值返回. ''' def func(): print("apple") pri ...

  9. windows使用.NET CORE下创建MVC,发布到linux运行

    1.在有dotnet core 的环境下,打开控制台.创建文件夹demo1 2.创建MVC程序 3.创建完成 4.使用记事本修改一下HomeController 修改端口 5.发布 6.压缩发布的文件 ...

  10. CF741 D Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths

    题目意思很清楚了吧,那么我们从重排回文串的性质入手. 很容易得出,只要所有字符出现的次数都为偶数,或者有且只有一个字符出现为奇数就满足要求了. 然后想到什么,Hash?大可不必,可以发现字符\(\in ...