• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

iOS - 向上推时停止 UIRefreshControl

[复制链接]
菜鸟教程小白 发表于 2022-12-12 22:18:24 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我最近实现了 UIRefreshControl 以在下拉时从 iCloud 加载数据,但是,我发现用户在需要时将 UITableView 推回很直观停止刷新。我无法弄清楚如何在不使用 UIPanGestureRecognizer 的情况下检测到这一点,这会删除我的 UITableView 的功能。

有什么方法可以检测到在刷新期间将 UITableView 推回,而不删除现有 tableview 的功能?谢谢。



Best Answer-推荐答案


在这种情况下我要做的是利用 UITableViewDelegate 符合 UIScrollViewDelegate 的事实。这样你就可以知道你的 tableView 上何时发生了不同的滚动事件。如果您是 UITableViewController 的子类,那么您已经符合 UITableViewDelegate,所以一切都很好。

我做的第一件事是为 contentOffset 设置一个属性,以便在开始拖动时记录它。

@property (nonatomic, strong) NSNumber *contentOffsetAtStartOfDragging;

我选择将其设为 NSNumber 而不是说看起来更自然的 CGFloat 的原因是,我不希望该属性在不需要时卡在某个值上。当该属性对我不再有用时,我希望它为零。不过,这只是我的设计选择,不会有任何区别。

无论如何,我这样做的方式是在拖动开始时记录 contentOffset,然后在拖动结束时将其与 contentOffset 进行比较。那就是我知道用户滚动到的 contentOffset 是否低于开始拖动时的值,我可以结束刷新。

此外,当拖动完成后,出于上述原因,我将我的属性设置为 nil。

- (void)scrollViewWillBeginDraggingUIScrollView *)scrollView
{
    if ([self.refreshControl isRefreshing]) {
        self.contentOffsetAtStartOfDragging = [NSNumber numberWithFloat:scrollView.contentOffset.y];
    }
}

- (void)scrollViewDidEndDraggingUIScrollView *)scrollView willDecelerateBOOL)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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap