web-dev-qa-db-ja.com

UITableView Scrollイベント

Mytableビューがスクロールされたかどうかを検出したいので、次のようなすべてのタッチイベントを試しました。

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

しかし、すべてのタッチイベントはスクロールに応答しませんが、セルがタッチ、移動などされたときにのみ応答するようです

UITableViewのスクロールイベントを検出する方法はありますか?

42
Alaa Eldin

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");
}

これは、ドキュメントまたはヘッダーファイルでわかるように、UITableViewDelegateUIScrollViewDelegateに準拠しているためです。

118
fabian789

Solidusからの要求に応じて複数のテーブルビューがある場合、UITableViewはUIScrollViewから派生するため、スクロールビューをコールバックからtableviewにキャストしてから、tableviewと比較してソーステーブルビューを見つけることができます。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {    
        UITableView* fromTableView = (UITableView*) scrollView;
        UITableView* targetTableView = nil;
        if (fromTableView == self.leftTable) {
            targetTableView = self.leftTable;
        } else {
            targetTableView = self.rightTable;
        }
...
}
6
dev

これらは、UITableViewDelegateがスクロールするかスクロールしたかを検出するためのSwift 3の場合のUITableViewからのメソッドです。

func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {

}

func scrollViewDidScroll(_ scrollView: UIScrollView) {

}
3
pableiros