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 滚动事件的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 滚动事件

在 tableview 滚动时拦截 UITableView 中的 TouchUpInside 事件

检测 UIScrollView 中的滚动事件并发送到 UITableView 或其他 UIScrollView

当 UITableView 仍在滚动时,如何在 tableHeaderView 上启用触摸事件?

在tableview中加载异步图像,它们在每次滚动时消失

如何检测 UITableView 仅在 iOS 中向下滚动?