ios中uiscrollview的底部刷新控件

Posted

技术标签:

【中文标题】ios中uiscrollview的底部刷新控件【英文标题】:Bottom refresh control for uiscrollview in ios 【发布时间】:2016-06-08 06:42:55 【问题描述】:

如何在 UIScrollView 的底部添加 UIRefreshController。 我正在 UIScrollView 中实现加载更多选项,以便我可以将更多数据加载到滚动视图中。

在此先感谢...

【问题讨论】:

为什么不用表格视图? 请查看组件SVPullToRefresh希望对您有所帮助 【参考方案1】:

将您的数据放入表格视图中,然后可以使用标准的UITableViewDelegate 回调轻松完成。不要试图操纵 Apple 自己的 UIRefreshControl 进入表格或滚动视图的底部,因为它会以麻烦告终。

这样做:

在您的tableView:numberOfRowsInSection: 中返回data.count+1

在您的tableView:cellForRowAtIndexPath: 中检查if (indexPath.row == data.count)。如果是这样,创建并返回一个基本单元格,其文本标签设置为“加载更多...”

在您的tableView:didSelectRowAtIndexPath: 中再次检查if (indexPath.row == data.count)。如果是这样,请触发您自己的[self loadMoreData] 方法,然后调用[self.tableView reloadData]

【讨论】:

【参考方案2】:

我做了这样的事情来处理在tableview(即dataTable)中加载更多数据:

1)在tableview的底部添加一个活动指示器(即spinner)。

2) 这样做:

-(void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset

    if(self.dataTable.contentOffset.y<0)
        //it means table view is pulled down like refresh
        return;
    
    else if(self.dataTable.contentOffset.y >= (self.dataTable.contentSize.height - self.dataTable.bounds.size.height)) 
        NSLog(@"bottom!");
        self.spinner.hidden = false;
        [self.spinner startAnimating];
        [self refreshPulled];
    



-(void)refreshPulled

    //get more data and reload table here and hide spinner when all is done


希望对你有所帮助。

【讨论】:

【参考方案3】:

UIRefreshControl 只能在 UITableView 中使用,正如 Apples 文档中所说:

Because the refresh control is specifically designed for use in a table view that's managed by a table view controller, using it in a different context can result in undefined behaviour.

【讨论】:

最好重新考虑您的设计。但是如果你需要它,只需 `[addSubview:[[UIRefreshControl alloc] init]]```然后给它添加一些约束

以上是关于ios中uiscrollview的底部刷新控件的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发UI篇—UIScrollView控件介绍

iOS开发UI篇—UIScrollView控件介绍

iOS UI控件7(UITableView)

IOS 常用UI控件

iOS开发UI篇—实现UITableview控件数据刷新

iOS开发UI篇—实现UItableview控件数据刷新