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. 3. svg学习笔记-基本形状和画笔属性

    svg中可以绘制的基本图形有线段,矩形,多边形,圆,椭圆,分别来看一下这些基本图形: 线段 使用<line>元素创建一条线段,格式如下: <line x1=" start- ...

  2. powershell脚本执行绕过powershell下脚本执行限制(cmd下执行)以及在cmd下隐藏脚本窗口

    powershell脚本执行绕过powershell下脚本执行限制(cmd下执行) powershell脚本运行方式有两种,一种是powshell中运行,另一种是在cmd中(在某些情况下相当有用) p ...

  3. CVE-2017-8464 分析

    目录 CVE-2017-8464(stuxnet 3.0) 分析 0xFF 前言 0x00 分析工具 0x01 漏洞复现 1).生成一个DLL用于测试 2).构造一个恶意的lnk二进制文件 3).RU ...

  4. Spring容器技术内幕之BeanWrapper类介绍

    引言 org.springframework.beans.BeanWrapper是Spring框架中重要的组件类.BeanWrapper相当于一个代理器,Spring委托BeanWrapperwanc ...

  5. WPF模板(二)应用

    本次内容来源于电子书,和上一篇一样. 在WPF中有三大模板ControlTemplate,ItemsPanelTemplate,DataTemplate.其中ControlTemplate和Items ...

  6. 基于Django rest framework 和Vue实现简单的在线教育平台

      一.基于api前端显示课程详细信息 1.调整Course.vue模块 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 2 ...

  7. 思考与算法:大脑是cpu、思考是算法

    思考与算法:大脑是cpu.思考是算法

  8. google colab 使用指南

    重启colab !kill - - 输出ram信息 !cat /proc/meminfo 输出cpu信息 !cat /proc/cpuinfo 更改工作文件夹 一般,当你运行下面的命令: !ls 你会 ...

  9. 开源的许可证GPL、LGPL、BSD、Apache 2.0

    软件开发者要开源软件,不单单是开放源代码就可以了,选择一种许可证很重要,一个许可证之于软件就相当于价值观之于普通人,代表了这个软件的基本品性.一个错误的许可证选择可能会直接导致整个项目的失败.各种开源 ...

  10. SpringBoot之静态资源放行

    为了提高开发效率,编写对应的代码生成器.代码生成器主要有两个方面,一个是在线Web,另外一个是运行某个类. 使用的技术是SpringBoot+MyBatis-Plus+MySQL+JDK8. 在编写在 ...