用于“上拉”刷新的 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?的主要内容,如果未能解决你的问题,请参考以下文章