iOS - 在上推时停止 UIRefreshControl

标签 ios uitableview gesture uipangesturerecognizer uirefreshcontrol

我最近实现了 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/

相关文章:

ios - 如何将数组中的字符串值绑定(bind)到 uibutton(静态)

ios - NSCoding 和恢复 View

ios - 在 iOS 上验证配置文件时遇到问题

ios - UITableView 或 UICollectionView 提供类似 Siri 的简单用户体验

events - 手势识别 JavaScript 库

android - 在 GestureDetector 中长按也会触发

ios - 子类上无继承导出

ios - UITableView - 如何识别我是否将单元格拖到单元格上?

ios - NSUserDefaults 不适用于 Swift 中的 UITableView

javascript - 检测带有跳跃 Action 的滑动手势