[绍棠] iOS UITableView 的坑:isDragging 属性无效, tableView是拖拽还是自由滑动区分
来源:互联网 发布:google翻译软件下载 编辑:程序博客网 时间:2024/06/06 03:10
简要:对于 UITableView、UICollectionView,如果要判断用户是否正在拖拽,要使用
isTracking
属性代替isDragging
属性
在 iOS 里,键盘弹起之后,如果用户想让键盘收起,一个常见的做法是当用户上下划动一下 tableView 的时候就把键盘收起。比如京东商品评论就是这么做的。
那么如何实现这个效果呢?最简单的想法是:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView { [self.view endEditing:YES];}
但这样写有一个问题:除了用户手动地上下划动,其他原因造成的滚动也会触发这个回调函数。例如,当键盘弹出的时候,为了让 tableView 的内容能完全显示,往往会将 tableView 的底部 inset 改为键盘高度,此时也会触发scrollViewDidScroll:
事件。如果像上面写的话,就会导致键盘又被收起来了。
所以,我们自然想到用 scrollView 的isDragging
属性来判断一下滚动的原因,是否是用户拖拽导致的:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView { if (scrollView.isDragging) { [self.view endEditing:YES]; }}
理论上这样写应该没有任何问题,然而实际却不能用!因为测试发现,即使不是用户划动,isDragging
属性也可能为YES
。比如上面的例子,由于改变 inset 导致的滚动,用户并没有拖拽,然而isDragging
属性仍为YES
。
也就是说,isDragging
属性在 UITableView 上是不能用的,它的值并不总是正确,并不能正确反映出用户是否在拖拽。UICollectionView 也有同样的问题。
要解决这个问题,我们只能用isTracking
代替isDragging
。所以改成:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView { if (scrollView.isTracking) { [self.view endEditing:YES]; }}
就没有问题了。
查了一下苹果文档,并没有相关的解释,看来又是官方实现的一个小 bug 了。
p.s. 文中的效果也可以用下面这个方法实现:
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { [self.view endEditing:YES];}
- [绍棠] iOS UITableView 的坑:isDragging 属性无效, tableView是拖拽还是自由滑动区分
- iOS UITableView(十三) tableView经常用的代理总结和滑动删除
- iOS UITableView(一)tableView的创建
- iOS UITableView(十一) tableView的下拉刷新
- iOS学习笔记之判断tableview向上还是向下滑动!
- 如何让UITableview的sectionHeader随着tableview一起滑动
- IOS 非常流畅的滑动tableView
- iOS tableView滑动到区头的时候
- ios tableView滑动动画
- iOS tableview 滑动删除
- iOS tableview 滑动删除
- [IOS]UITableView实现Cell的滑动删除
- iOS之设置tableView背景图片/让UITableView自动滑动(定位)到某一行cell
- ios隐藏uitableview下面多余的tableview的线条
- ios隐藏uitableview下面多余的tableview的线条
- iOS隐藏UITableView下面多余的tableView的线条
- iOS tableView 控件用法 [0] UITableView的基本用法
- ios tableView那些事 (十七) UITableView的下拉刷新
- 导出时添加模板导出Excel
- 文章标题
- Linux内核链表细节及应用实例
- hadoop学习笔记 一 安装搭建hello world
- C++中的Lambda表达式详解
- [绍棠] iOS UITableView 的坑:isDragging 属性无效, tableView是拖拽还是自由滑动区分
- 如何制作风格迁移图?
- 在函数后加const的意义
- jQuery基础---选择器
- js中的鼠标和滚轮事件 — 第13.4.3节
- 安卓手机上运行 PC-E500 程序
- JAVA设计模式之门面模式(外观模式)
- java 多线程 (一)线程的实现
- 生成自定义二维码