如何设置UIScrollview上的UITableView滑动删除
来源:互联网 发布:ubuntu安装phpstorm 编辑:程序博客网 时间:2024/06/11 15:51
有一个界面,底部是一个UIScrollview,然后通过addSubView的方式 add了左右2个UITableView。可以左右滑动。一切都很正常,但是问题来了,今天要给右边的tableview增加滑动删除功能。 看似简单,但是有一个蛋疼的问题,这时滑动删除的事件被底部的UIScrollview给响应了,cell根本拿不到这个滑动手势。
想想就蛋疼啊,tableView是UIScrollview 的子类,cell里面的ContentView好像在iOS7.0之后也是UIScrollview ,再加底部一个UIScrollview,这滑动手势事件该怎么传递好呢,给谁都不行啊。 给了底部,那么就没法滑动删除,给了cell那么正常的左右滑动又不行了。
经过一番google,资料还真不多。 最后使用一个方法:让cell 和 底部的UIScrollview都响应这个滑动手势。亲测有效.
首先:继承UIScrollview,遵循UIGestureRecognizerDelegate协议
@interface MyScrollview : UIScrollView<span class="tag"><<span class="title">UIGestureRecognizerDelegate</span>></span>
然后重写下面方法:
-(BOOL)gestureRecognizer:(UIGestureRecognizer <span class="variable">*)</span>gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer <span class="variable">*)</span>otherGestureRecognizer { <span class="keyword" style="font-weight: bold;">if</span> (gestureRecognizer.<span class="keyword" style="font-weight: bold;">state</span> != <span class="number">0</span>) { <span class="keyword" style="font-weight: bold;">return</span> YES; } <span class="keyword" style="font-weight: bold;">else</span> { <span class="keyword" style="font-weight: bold;">return</span> NO; }}
这里大致意思就是:如果这个手势没有被识别,那么就多个gestureRecognizer可以同步识别
然后用这个MyScrollView替换界面中的底部UIScrollview。这样就OK啦。
但是这样又带来另外一个问题,在左右滑动时,tableView可以同时上下滑动。哎,不怪人家,都说了手势事件大家都可以响应嘛。。。
不过这个好解决:在viewController中处理下滚动时的事件
<span class="comment" style="color: rgb(153, 153, 136); font-style: italic;">#pragma mark - ScrollView delegate</span>- (void)<span class="symbol">scrollViewDidScroll:</span>(<span class="constant">UIScrollView</span> *)scrollView{<span class="indent"> </span><span class="keyword" style="font-weight: bold;">if</span> (scrollView == _contentView)<span class="indent"> </span>{<span class="indent"> </span><span class="indent"> </span><span class="keyword" style="font-weight: bold;">self</span>.leftTableView.scrollEnabled = <span class="constant">NO</span>;<span class="indent"> </span><span class="indent"> </span><span class="keyword" style="font-weight: bold;">self</span>.rightTableView.scrollEnabled = <span class="constant">NO</span>;<span class="indent"> </span>}}- (void)<span class="symbol">scrollViewDidEndDecelerating:</span>(<span class="constant">UIScrollView</span> *)scrollView{<span class="indent"> </span><span class="keyword" style="font-weight: bold;">if</span> (scrollView == _contentView)<span class="indent"> </span>{<span class="indent"> </span><span class="indent"> </span><span class="keyword" style="font-weight: bold;">self</span>.leftTableView.scrollEnabled = <span class="constant">YES</span>;<span class="indent"> </span><span class="indent"> </span><span class="keyword" style="font-weight: bold;">self</span>.rightTableView.scrollEnabled = <span class="constant">YES</span>;<span class="indent"> </span>}}
这样左右滚动时,tableview就没法上下滚动了。左右滚动结束,再允许tableView上下滚动。
这样暂时解决了问题吧,原理也不细说了,因为我也没有去细究。注意,这里解决的是给右边的tableView增加滑动删除,如果你的需求是给左边的tableView增加滑动删除,那么解决方案是:把产品经理揍一顿[笑cry]
- 如何设置UIScrollview上的UITableView滑动删除
- 为嵌套在左右滑动的UIScrollview上的UITableView增加滑动删除
- 为嵌套在左右滑动的UIScrollview上的UITableView增加滑动删除
- UIScrollView滑动与UITableView左滑删除冲突问题解决方案
- UITableView滑动删除的实现
- UIScrollView,点击、滑动翻页事件的区分以及如何直接获取UIScrollView上的点击事件
- iOS UITableView(UIScrollView)滑动到底部的判断
- iOS UITableView(UIScrollView)滑动到底部的判断
- UITableView实现Cell的滑动删除
- [IOS]UITableView实现Cell的滑动删除
- UITableView实现Cell的滑动删除
- UITableView实现Cell的滑动删除
- 滑动删除uitableview cell
- UITableView 实现滑动删除
- UITableView 滑动删除数据
- UITableView 滑动删除
- UITableView滑动删除
- UITableView滑动删除
- css布局模型
- 如何将多个源文件编译为一个.ko
- 点击子对象,不解触发父对象click事件
- Dojo开发之布局容器和堆叠容器使用
- javascript(二):DOM
- 如何设置UIScrollview上的UITableView滑动删除
- 豆瓣电影的爬虫示例
- 【黑马程序员】第六章:Java API
- jstl 的一些随笔
- HDU5599GTW likes tree
- KVO delegation与KVO的区别和优缺点
- android中的ViewTreeObserver
- 基本原子操作
- CSS层叠样式表