UITableView 支持左右滑动(二)
原理:
用tableView其中一个cell 来展示一个 UIScrollView, 在scrollview上很像放置子tableView
注意点: 外层tableView需要实现手势代理
/*
若重叠tableview, 内外层的都可以滑动
*/
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
if(![otherGestureRecognizer.view isKindOfClass:[UITableView class]]){
return NO;
}
return YES;
}
如图:

关键代码:
是通过监听内外层tableView的偏移量 contentOffset, 来切换哪一个tableView可以滑动, 不可以滑动的tableView 实时设置contentOffset = CGPointZero(来达到不能滚动的目的)
监听外层tableview:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{if (scrollView == self.outTableView) {
CGFloat contentOffsetY = scrollView.contentOffset.y;
if (contentOffsetY == ) {
[self changeOuterTableViewScrollStatus];
}
CGFloat tableViewSectionY = [self.outTableView rectForSection:_horizontalSection].origin.y;
if (contentOffsetY >= tableViewSectionY) {//偏移量超过headerView时候, 则偏移量一直固定为tableViewSectionY, 来达到不能滚动
scrollView.contentOffset = CGPointMake(, tableViewSectionY);
self.canScroll = NO;
[self.currentItemView setTabCanScroll:YES];
}else{
if (!self.canScroll) {
scrollView.contentOffset = CGPointMake(, tableViewSectionY);
}
}
NSLog(@"外层%f ; tbtableViewSectionY:%f",contentOffsetY, tableViewSectionY);
}
}
外层监听通知, 来切换外层tableView可滚动
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeOuterTableViewScrollStatus) name:InnerTableViewLeaveTopNotification object:nil];
- (void)changeOuterTableViewScrollStatus{
self.canScroll = YES;
//leaveTop后,每个tableview偏移量恢复
for (UITableView *tb in self.itemViews) {
[tb setContentOffset:CGPointZero];
}
}
- (void)setCanScroll:(BOOL)canScroll{
_canScroll = canScroll;
for (SFHorizontalInnerTableView *tb in self.itemViews) {
[tb setTabCanScroll:!canScroll];
}
}
监听内层tableView:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
CGFloat contentOffsetY = scrollView.contentOffset.y;
if (contentOffsetY != ) {
NSLog(@"内层tb偏移:%f tabCanScroll:%d",contentOffsetY , self.tabCanScroll);
}
//外部滚动时, 内部通过设置CGPointZero 来控制不能滚动
if (!self.tabCanScroll) {
scrollView.contentOffset = CGPointZero;
}
if (self.tabCanScroll && contentOffsetY < ) {//切换
self.tabCanScroll = NO;
scrollView.contentOffset = CGPointZero;
[[NSNotificationCenter defaultCenter] postNotificationName:InnerTableViewLeaveTopNotification object:nil];
}
// scrollView.showsVerticalScrollIndicator = self.tabCanScroll;
}
UITableView 支持左右滑动(二)的更多相关文章
- UITableView 支持左右滑动(一)
原理如下: SwipeTableView subView 1 : UIScrollView作为容器, 主要负责左右滑动, 每个tableView的顶部设置相同的contentInset subVie ...
- [js开源组件开发]js轮播图片支持手机滑动切换
js轮播图片支持手机滑动切换 carousel-image 轮播图片,支持触摸滑动. 例子见DEMO http://www.lovewebgames.com/jsmodule/carousel-ima ...
- 重磅消息:微信小程序支持长按二维码进入
之前微信小程序一般通过以下入口进入: 而用户经常使用“长按二维码”识别应用的功能一直未开放,据酷客多了解,微信安卓6.5.6内测版已经支持长按二维码识别和进入小程序,意味着把小程序二维码分享给朋友,或 ...
- jquery.qrcode.min.js(支持中文转化二维码)
详情请看:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/jqueryqrcodeminjs/ 今天还是要讲一下关于二维码的知识,前 ...
- UITableView 的横向滑动实现
UITableView 的横向滑动实现 概述 为了实现横向滑动的控件,可以继承类 UIScrollView 或类 UIView 自定义可以横向滑动的控件,这里通过 UITableView 的旋转,实现 ...
- flickity:支持触摸滑动,响应迅速的幻灯片轮播插件
简介:flickity 是一个支持触摸,响应迅速的幻灯片轮播插件.支持环绕滑动.自由滑动.组滑动.自动播放.延迟加载.视差滑动.图片滑动.兼容IE10+, Android 4+, Safari for ...
- Android Widget 开发详解(二) +支持listView滑动的widget
转载请标明出处:http://blog.csdn.net/sk719887916/article/details/47027263 不少开发项目中都会有widget功能,别小瞧了它,他也是androi ...
- html5 touch事件实现触屏页面上下滑动(二)
五一小长假哪都没去,睡了三天,今天晕晕沉沉的投入工作了,但还是做出了一点点效果 上周用html5的touch事件把简单的滑动做出来了,实现了持续页面上下滑动的效果,参考之前 的文章及代码html5 t ...
- Android自定义组合控件:UIScrollLayout(支持界面滑动及左右菜单滑动)
一.前言: 我之前很早的时候,写过一篇<左右滑出菜单>的文章: http://blog.csdn.net/qingye_love/article/details/8776650 用的是对V ...
随机推荐
- thymeleaf 下拉选框回显选中
参考了许多,最后以这种方法实现了.尽管有些愚蠢,初步学习阶段.不知道为什么用th:field会报错.网上有些是用field来解决回显问题的. <select name="positio ...
- angularJS拦截路由
$rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams)
- mybatis入门总结一
1.parameterType 表示输入参数的类型 2.resultType 表示输出结果的类型 不管输出的是一条还是多条,都只代表单条记录所映射的java对象类 3.#{} 表示sql语句中的占位 ...
- bfs(最短路径)
http://poj.org/problem?id=3278 Catch That Cow Time Limit: 2000MS Memory Limit: 65536K Total Submis ...
- python学习第三天格式化输出%s %d
编程语言为什么要格式化输出吗,一般print()就够了,有些复杂的格式输出比较麻烦,用格式化输出更加高效, info=""" ---------------------- ...
- wireshark自动化之tshark命令行
tshark是wireshark安装目录下命令行工具 使用tshark可以通过自动化方式调用wireshark tshark -a duration:30 抓包30秒-w cap.cap 保存为cap ...
- installing-sql-server-2012-error-prior-visual-studio-2010-instances-requiring 转摘
there are two way: First : Inside your CD of SQL Server 2012 you can go to this path \redist\VisualS ...
- BUUCTF--不一样的flag
测试文件:https://buuoj.cn/files/91b89e765c9aff8e82690c0868975b37/0bf39b5d-5f2f-4095-a921-fb5c20f53f21.zi ...
- UIView与CALayer 区别
在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮.一个文本标签.一个文本输入框.一个图标等等,这些都是UIView. 其实UIView之所以能显示在屏幕上,完全是因为它内部的一个 ...
- SAP固定资产(FI-AA),一网打尽(转)
在固定资产模块的边缘,游荡了四五年的时间了,细细数来,固定资产这个熟悉又抽象的东西(熟悉是由于天天接触常常听说,抽象是具体到系统实现上有些复杂并且常遇到问题),好像也没有多少东西. 1) SAP固定资 ...