UIRefreshControl用于“上拉”刷新吗?

8

我该如何将UIRefreshControl添加到UICollectionView的底部?也就是说,当向上滚动(查看旧数据或其他内容)时,它是如何工作的?

3个回答

12

你不能使用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
1
@S.Birklin - 我认为这比你想象的要容易。只需让您的 numberOfRowsForSection 返回一个额外的行(假设您有额外的数据需要获取)。然后,cellForRowAtIndexPath 只需查看它是否超出了现有数据的范围,并在这种情况下显示“加载”单元格。请参见 https://github.com/robertmryan/UITableView-Bottom-Refresh 以获得简单的说明。 - Rob
我决定采用你在Github示例中使用的方法。有一部分我不确定。当服务器说:“我们没有更多数据提供给您”时,tableView应该如何响应?我试图让tableView删除加载单元格,但是在删除单元格时出现了错误。有什么想法吗?还是我应该问一个新问题.. - Just a coder
删除代码只需要一行代码 --> rableView.deleteRowsAtIndexPaths([myIndexPath], withRowAnimation: .None)。 我得到的错误是-->更新后现有部分中包含的行数(14)必须等于更新前该部分中包含的行数(14),加上或减去从该部分中插入或删除的行数。看起来好像该行没有被删除。现在我正在查看是否因为委托方法返回一个额外的计数对象 --> numberOfRowsInSection {return sellerData.count + 1} - Just a coder
正确。当您调用 deleteRows... 时,它将调用 numberOfRows...,该方法现在必须返回比之前少一个的值。 - Rob

4
这里提供了一个CCBottomRefreshControl类别,用于UIScrollView类(UICollectionView类的父类),实现了bottomRefreshControl属性。它兼容iOS 6和7的原生刷新控件。

-3

不行。你无法真正自定义UIRefreshControl


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接