【发布时间】:2013-02-16 20:57:08
【问题描述】:
如何将 UIRefreshControl 添加到 UIColloectionView 的底部?这意味着在向上滚动(查看旧数据或其他内容)时它是如何工作的?
【问题讨论】:
标签: ios objective-c uicollectionview uirefreshcontrol
如何将 UIRefreshControl 添加到 UIColloectionView 的底部?这意味着在向上滚动(查看旧数据或其他内容)时它是如何工作的?
【问题讨论】:
标签: ios objective-c uicollectionview uirefreshcontrol
您不能使用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。例如,如果您要加载更多数据,请在此单元格的末尾添加一个部分。如果你正确地格式化这个额外的单元格(例如,一个贯穿整个集合视图的单元格),它肯定可以呈现你正在寻找的效果。
【讨论】:
numberOfRowsForSection 返回一行额外的行(假设您有额外的数据要获取)。然后cellForRowAtIndexPath 可以查看它是否超出了现有数据的范围,如果是这种情况,则显示“加载”单元格。请参阅github.com/robertmryan/UITableView-Bottom-Refresh 以获得简单说明。
rableView.deleteRowsAtIndexPaths([myIndexPath], withRowAnimation: .None) 我得到的错误是 --> 更新后现有节中包含的行数(14)必须相等更新前该节中包含的行数 (14),加上或减去从该节插入或删除的行数。看起来好像该行没有被删除。我现在想看看这是否是因为委托方法返回了一个额外的计数对象 --> numberOfRowsInSection {return SellerData.count + 1}
deleteRows... 时,它会调用numberOfRows...,它现在必须返回比以前少一个。
这是实现 bottomRefreshControl 属性的 UIScrollView 类(UICollectionView 类的父级)的CCBottomRefreshControl 类别。它与 iOS 6 和 7 原生刷新控件兼容。
【讨论】:
你不能。你根本无法真正自定义UIRefreshControl。
【讨论】: