Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

UITableView Scroll event

I want to detect if mytable view has been scrolled, I tried all touch events like this one:

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

but it seems that all touch events don't response to scroll but they response only when cells are touched, moved,...etc

Is there a way to detect scroll event of UITableView ?

like image 990
Alaa Eldin Avatar asked Dec 27 '11 08:12

Alaa Eldin


2 Answers

If you implement the UITableViewDelegate protocol, you can also implement one of the UIScrollViewDelegate methods:

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView 

or

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 

For example, if you have a property called 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"); } 

This is because UITableViewDelegate conforms to UIScrollViewDelegate, as can be seen in the documentation or in the header file.

like image 70
fabian789 Avatar answered Sep 19 '22 15:09

fabian789


If you have more than one table views as asked by Solidus, you can cast the scrollview from the callback to tableview as UITableView is derived from UIScrollView and then compare with the tableviews to find the source tableview.

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {             UITableView* fromTableView = (UITableView*) scrollView;         UITableView* targetTableView = nil;         if (fromTableView == self.leftTable) {             targetTableView = self.leftTable;         } else {             targetTableView = self.rightTable;         } ... } 
like image 44
dev Avatar answered Sep 17 '22 15:09

dev