在UITableViewController中存在一个刷新控件refreshController,利用这个刷新控件可以实现对tableView数据的刷新。
一、实现下拉刷新
1、实例化一个refreshController
image.png
这是苹果官方解释
实例化一个refreshController调用的是init()这个构造函数,因为在使用这个构造函数的时候会默认生成默认的一个frame。
2、将refreshController添加到tableView上
由于refreshController是下拉实现刷新的,所以可以添加到tableView上
3、添加监听方法
refreshController下拉会触发 UIControlEventValueChanged 事件
4、数据刷新完毕需要停止刷新控件的动画
endRefreshing()
//设置刷新控件
refreshController = UIRefreshControl()
tableView?.addSubview(refreshController!)
//添加监听方法
refreshController?.addTarget(self, action: #selector(loadData), for: .valueChanged)
//设置刷新控件的渲染颜色
refreshController?.tintColor = .orange
//刷新方法
func loadData(){
............
............
//刷新完毕停止动画
refreshController?.endRefreshing()
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
二、实现上拉刷新
原理:当tableView被滑动到最后一行的时候刷新数据
1、定义一个需要实现上拉刷新的标记
用来标记是否已经滑动到了最后一行
2、如果滑动到了最后一行就进行数据的刷新操作
若要实现无缝刷新最好在willDisplaycell中实现
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
// 1. 判断是否是最后一行 indexPath.row = max , indexPath.section = max
// 取出当前的行数
let row = indexPath.row
// 取出最大节数
let section = tableView.numberOfSections - 1
if row < 0 || section < 0 {
return
}
//取最后一节的最大行数
let maxRowCount = tableView.numberOfRows(inSection: section) - 1
if row == maxRowCount && indexPath.section == section && !isPullUp{
print("进行上拉刷新")
isPullUp = true
//刷新数据
loadData()//在刷新数据的方法中刷新完成之后需要将刷新标记改为false
}
}
作者:EIamor
来源:CSDN
原文:https://blog.csdn.net/eiamor/article/details/72629356
版权声明:本文为博主原创文章,转载请附上博文链接!
网友评论