There is a similar question to this but answer is very general, vague.( Detecting UITableView scrolling ) Please don\'t dismiss. I am looking for concrete solution.
I ha
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
if (scrollView == myTableView){
// Your code here.....
}
}
I had the same problem, and I got some ideas from the answers above to fix it, but not only the app crashes if I want to refresh while the table view is being scrolled, but also it crashes if I scroll while it's being refreshed. So the extended solution to fix the problem under all circumstances is to:
1.1. Disable scrolling if the user has pressed the refresh button
1.2. Enable scrolling once the refresh process is done
2.1. Disable the refresh button if the user is scrolling
2.2. Enable the refresh button once the user is finished scrolling
To implement the first part (1.1., and 1.2.):
-(void)startReloading:(id)sender
{
...
self.tableView.userInteractionEnabled = NO;
// and the rest of the method implementation
}
-(void)stopReloading:(id)sender
{
self.tableView.userInteractionEnabled = YES;
// and the rest of the method implementation
}
To implement the second part (2.1., and 2.2.):
- (void)scrollViewWillBeginDragging:(UIScrollView *)activeScrollView
{
barButton.enabled = NO;
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
barButton.enabled = YES;
}
And as it's explained in the previous answer, UISCrollViewDelegate
needs to be set in the .h
file:
@interface MyTableViewController : UITableViewController <UIScrollViewDelegate>
P.S. You can use scrollEnabled
instead of userInteractionEnabled
, but it all depends on what you're doing, but userInteraction is the preferred option.
To expand on Vladimir's answer, this is how I implemented this solution:
In .h file:
@interface MyViewController : UIViewController <UIScrollViewDelegate>
In .m file:
- (void)scrollViewWillBeginDragging:(UIScrollView *)activeScrollView {
//logic here
}
You don't need to subclass UITableView
to track scrolling. Your UITableViewDelegate can serve as UIScrollViewDelegate
as well. So in your delegate class you can implement -scrollViewWillBeginDragging:
or whatever UIScrollViewDelegate
method you need in your situation. (as actually suggested in the question you mention)