UITableView 滚动事件
Posted
技术标签:
【中文标题】UITableView 滚动事件【英文标题】:UITableView Scroll event 【发布时间】:2012-01-28 09:16:13 【问题描述】:我想检测 mytable 视图是否已滚动,我尝试了所有类似这样的触摸事件:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
[super touchesBegan:touches withEvent:event];
//my code
但似乎所有触摸事件都不会响应滚动,而是仅在单元格被触摸、移动等时才会响应
有没有办法检测 UITableView 的滚动事件?
【问题讨论】:
参考这个Touch Events in UIScroll View in iPhone 【参考方案1】:如果您实现UITableViewDelegate
协议,您还可以实现UIScrollViewDelegate
方法之一:
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
或
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
例如,如果您有一个名为 tableView
的属性:
// ... setting up the table view here ...
self.tableView.delegate = self;
// ...
// Somewhere in your implementation file:
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
NSLog(@"Will begin dragging");
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
NSLog(@"Did Scroll");
这是因为UITableViewDelegate
符合UIScrollViewDelegate
,可以在文档或头文件中看到。
【讨论】:
如果我们有多个 UITableView 怎么办? 您应该能够将两个表视图的委托设置为self
,然后使用传递的scrollView
检查哪一个被滚动。 See here.【参考方案2】:
如果 Solidus 要求您有多个表视图,您可以将回调中的滚动视图转换为表视图,因为 UITableView 是从 UIScrollView 派生的,然后与表视图比较以找到源表视图。
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
UITableView* fromTableView = (UITableView*) scrollView;
UITableView* targetTableView = nil;
if (fromTableView == self.leftTable)
targetTableView = self.leftTable;
else
targetTableView = self.rightTable;
...
【讨论】:
完美这对我有帮助 一个小提示:为了使 == 比较起作用,您不必强制转换。【参考方案3】:这些是 UITableViewDelegate
中用于 Swift 3 的方法,用于检测 UITableView
何时滚动或确实滚动:
func scrollViewWillBeginDragging(_ scrollView: UIScrollView)
func scrollViewDidScroll(_ scrollView: UIScrollView)
【讨论】:
以上是关于UITableView 滚动事件的主要内容,如果未能解决你的问题,请参考以下文章
在 tableview 滚动时拦截 UITableView 中的 TouchUpInside 事件
检测 UIScrollView 中的滚动事件并发送到 UITableView 或其他 UIScrollView