【问题标题】:UITableView Scroll eventUITableView 滚动事件
【发布时间】:2012-01-28 09:16:13
【问题描述】:

我想检测 mytable 视图是否已滚动,我尝试了所有类似这样的触摸事件:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
  {
    [super touchesBegan:touches withEvent:event];
    //my code
  }

但似乎所有触摸事件都不会响应滚动,而是仅在单元格被触摸、移动等时才会响应

有没有办法检测 UITableView 的滚动事件?

【问题讨论】:

标签: iphone objective-c ios xcode uitableview


【解决方案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) {

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-05
    • 2017-05-12
    • 2012-11-23
    • 2013-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多