用于“上拉”刷新的 UIRefreshControl?

Posted

技术标签:

【中文标题】用于“上拉”刷新的 UIRefreshControl?【英文标题】:UIRefreshControl for "Pull Up" to refresh? 【发布时间】:2013-02-16 20:57:08 【问题描述】:

如何将 UIRefreshControl 添加到 UIColloectionView 的底部?这意味着在向上滚动(查看旧数据或其他内容)时它是如何工作的?

【问题讨论】:

【参考方案1】:

您不能使用UIRefreshControl 来执行此操作,但如果您可以使用更简单的解决方案,您只需将集合视图设置为在滚动到底部时自动加载更多数据。 (顺便说一句,这是一个更常见的用户界面......上拉刷新并不常见,但当您触底时自动检索更多数据。)

最原始的表现是响应UIScrollViewDelegate 方法并确定您是否已滚动到集合视图的底部(它本身就是UIScrollView 的子类):

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

    if ((scrollView.contentOffset.y + scrollView.frame.size.height) >= scrollView.contentSize.height)
    
        if (!self.isLoadingMoreData)
        
            self.loadingMoreData = YES;

            // proceed with the loading of more data
        
    

更好的是,如果您要加载更多数据,请在底部显示一个单元格,上面写着“请稍候,加载更多数据”,可能带有UIActivityIndicatorView。例如,如果您要加载更多数据,请在此单元格的末尾添加一个部分。如果你正确地格式化这个额外的单元格(例如,一个贯穿整个集合视图的单元格),它肯定可以呈现你正在寻找的效果。

【讨论】:

你有给用户这个通知的示例代码吗?我滚动到结束时加载数据,一切正常。现在我只需要加载数据时的通知。加载一个额外的单元格来执行此通知并不是那么简单。谢谢! @S.Birklin - 我认为这比你想象的要容易。只需让您的numberOfRowsForSection 返回一行额外的行(假设您有额外的数据要获取)。然后cellForRowAtIndexPath 可以查看它是否超出了现有数据的范围,如果是这种情况,则显示“加载”单元格。请参阅github.com/robertmryan/UITableView-Bottom-Refresh 以获得简单说明。 我决定使用您在 github 示例中使用的方法。有一部分我不确定。当服务器说:我们没有更多数据给你时,tableView 应该如何响应?我试图让 tableView 删除加载单元,但在删除单元时出错。有任何想法吗?还是我应该问一个新问题.. 删除代码是一行代码 --> rableView.deleteRowsAtIndexPaths([myIndexPath], withRowAnimation: .None) 我得到的错误是 --> 更新后现有节中包含的行数(14)必须相等更新前该节中包含的行数 (14),加上或减去从该节插入或删除的行数。看起来好像该行没有被删除。我现在想看看这是否是因为委托方法返回了一个额外的计数对象 --> numberOfRowsInSection return SellerData.count + 1 正确。当您调用deleteRows... 时,它会调用numberOfRows...,它现在必须返回比以前少一个。【参考方案2】:

这是实现 bottomRefreshControl 属性的 UIScrollView 类(UICollectionView 类的父级)的CCBottomRefreshControl 类别。它与 ios 6 和 7 原生刷新控件兼容。

【讨论】:

【参考方案3】:

你不能。你根本无法真正自定义UIRefreshControl

【讨论】:

以上是关于用于“上拉”刷新的 UIRefreshControl?的主要内容,如果未能解决你的问题,请参考以下文章

iOS常用刷新控件(下拉、上拉)详解

vue loadMore 上拉刷新不能实现的坑

UI组件——用jQuery做一个上拉刷新

今天终于学会了下拉刷新,上拉刷新

SwipeRefreshLayout + RecyclerView 实现 上拉刷新 和 下拉刷新

MUI - 上拉刷新/下拉加载