我最近实现了 UIRefreshControl
以在下拉时从 iCloud 加载数据,但是,我发现用户在需要时将 UITableView
推回很直观停止刷新。我不知道如何在不使用 UIPanGestureRecognizer
的情况下检测到这一点,这将删除我的 UITableView
的功能。
有什么方法可以检测到在刷新期间将 UITableView
推回,而不删除现有 tableview 的功能?谢谢。
最佳答案
在这种情况下我要做的是利用 UITableViewDelegate 符合 UIScrollViewDelegate 的事实。这样您就可以确定何时在您的 tableView 上发生不同的滚动事件。如果您是 UITableViewController 的子类,那么您已经符合 UITableViewDelegate,所以一切都很好。
我做的第一件事是为 contentOffset 设置一个属性,以便在拖动开始时记录它。
@property (nonatomic, strong) NSNumber *contentOffsetAtStartOfDragging;
我选择将其设为 NSNumber 而不是 CGFloat 的原因似乎更自然,因为我不希望该属性在不需要时保留某些值。当该属性对我不再有用时,我希望它为零。不过这只是我的设计选择,它不会真正产生任何影响。
无论如何,我这样做的方法是在拖动开始时记录 contentOffset,然后在拖动结束时将其与 contentOffset 进行比较。那就是我知道用户是否一直滚动到低于拖动开始时的 contentOffset,并且我可以结束刷新。
此外,当拖动完成后,出于上述原因,我将我的属性设置为 nil。
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
if ([self.refreshControl isRefreshing]) {
self.contentOffsetAtStartOfDragging = [NSNumber numberWithFloat:scrollView.contentOffset.y];
}
}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
if ([self.refreshControl isRefreshing] &&
scrollView.contentOffset.y > [self.contentOffsetAtStartOfDragging floatValue])
{
[self.refreshControl endRefreshing];
}
self.contentOffsetAtStartOfDragging = nil;
}
希望这对您有所帮助。让我知道它是否适合您。
关于iOS - 在上推时停止 UIRefreshControl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23794957/