一、swift 中使用MJRefresh
MJRefresh虽然是OC版本的,但确能在swift项目中直接使用并不用进行桥接
创建
//特殊刷新
//tableView?.mj_header = URefreshHeader()
//普通刷新
tableView?.mj_header = MJRefreshStateHeader()
tableView?.mj_header.setRefreshingTarget(self, refreshingAction: #selector(loadNewData))
tableView?.mj_footer = MJRefreshAutoNormalFooter()
tableView?.mj_footer.setRefreshingTarget(self, refreshingAction: #selector(loadMoreData))
请求数据
@objc func loadNewData() {
// 模拟数据延时
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
self.loadData()
}
}
@objc func loadMoreData() {
//模拟数据延时
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now()+2) {
print("开始加载数据")
// 上拉加载
for _ in 0..<10 {
self.listArr.append("hehe-\(arc4random()%9999)")
}
self.tableView?.mj_footer.endRefreshing()
// 刷新数据
self.tableView?.reloadData()
print("结束加载数据")
}
}
二、swift使用自带的UIRefreshControl
系统自带的刷新,比较难用,这里简单介绍一下
1.声明属性
//数组
var listArr:[String] = []
//刷新
var refreshControl : UIRefreshControl?
//上拉 还是下拉
var isPullUp = false
2.设置刷新控件
// 设置刷新控件
refreshControl = UIRefreshControl()
tableview?.addSubview(refreshControl!)
refreshControl?.addTarget(self, action: #selector(loadData), for: .valueChanged)
refreshControl?.addTarget(self, action: #selector(loadData), for: UIControlEvents.valueChanged)
refreshControl?.backgroundColor = UIColor.init(red: CGFloat(arc4random()%255)/255.0, green: CGFloat(arc4random()%255)/255.0, blue: CGFloat(arc4random()%255)/255.0, alpha: 1)
let attributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
refreshControl?.attributedTitle = NSAttributedString(string: "Last updated on \(NSDate())", attributes: attributes)
refreshControl?.tintColor = UIColor.white
tableview?.addSubview(self.refreshControl!)
3.模拟请求数据
@objc func loadData() {
// 模拟数据延时
DispatchQueue.main.asyncAfter(wallDeadline: .now() + 2) {
print("开始加载数据")
if self.isPullUp { // 上提加载
for _ in 0..<10 {
self.listArr.append("addadd-\(arc4random()%9999)")
}
}else { // 下拉刷新
self.listArr.removeAll()
for _ in 0..<10 {
self.listArr.append("hehe-\(arc4random()%9999)")
}
}
print("==========\(self.isPullUp)")
self.isPullUp = false
// 结束刷新
self.refreshControl?.endRefreshing()
// 刷新数据
self.tableview?.reloadData()
print("结束加载数据")
}
}
4.判断是上拉,还是下拉
// 上拉需要做无缝刷新,使用下面的方法:判断是不是最后一个 section 的最后一行,如果是,拖拽时进行 上拉加载 并刷新页面
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
// 当前行
let row = indexPath.row
// 最后一个section
let section = tableView.numberOfSections - 1
if row < 0 || section < 0 {
return
}
// 最后一行
let lastRow = tableView.numberOfRows(inSection: section) - 1
if row == lastRow {
isPullUp = true
loadData()
}
}
三、比较好玩的刷新功能
有兴趣可以看下面的demo
网友评论