Swift - 下拉刷新数据的功能实现(使用UIRefreshControl)
(本文代码已升级至Swift3)
而如果仅仅需要实现下拉刷新数据的话,那么使用 UIRefreshControl 就足够了,简单有好用。
(2)将 UIRefreshControl 添加到tableview视图中。
(3)给 UIRefreshControl 添加方法,当值改变的时候调用,用于数据请求刷新。
(4)请求数据确认完成之后,调用endRefreshing方法,关闭刷新。
一、在tableView上添加下拉刷新
1,UIRefreshControl 的使用步骤:
(1)创建 UIRefreshControl,并设置文字,颜色等信息。(2)将 UIRefreshControl 添加到tableview视图中。
(3)给 UIRefreshControl 添加方法,当值改变的时候调用,用于数据请求刷新。
(4)请求数据确认完成之后,调用endRefreshing方法,关闭刷新。
2,效果图如下
3,代码如下
import UIKit class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { //新闻列表 @IBOutlet weak var newsTableView: UITableView! //新闻数组集合 var dataArray:[HanggeArticle] = [HanggeArticle]() //拉刷新控制器 var refreshControl = UIRefreshControl() override func viewDidLoad() { super.viewDidLoad() self.automaticallyAdjustsScrollViewInsets = false newsTableView.delegate = self newsTableView.dataSource = self //添加刷新 refreshControl.addTarget(self, action: #selector(ViewController.refreshData), for: .valueChanged) refreshControl.attributedTitle = NSAttributedString(string: "下拉刷新数据") newsTableView.addSubview(refreshControl) refreshData() } // 刷新数据 func refreshData() { //移除老数据 self.dataArray.removeAll() //随机添加5条新数据(时间是当前时间) for _ in 0..<5 { let atricle = HanggeArticle(title: "新闻标题\(Int(arc4random()%1000))", createDate: Date()) self.dataArray.append(atricle) } self.newsTableView.reloadData() self.refreshControl.endRefreshing() } // 返回记录数 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return dataArray.count; } // 返回单元格内容 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = UITableViewCell(style: UITableViewCellStyle.subtitle, reuseIdentifier: "myCell") //设置单元格标题 let atricle: HanggeArticle = dataArray[indexPath.row] as HanggeArticle cell.textLabel?.text = atricle.title //设置单元格副标题 let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" let str = dateFormatter.string(from: atricle.createDate) cell.detailTextLabel?.text = str return cell } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } } //新闻结构体 struct HanggeArticle { var title:String var createDate:Date }
二、在UITableViewController上添加下拉刷新
如果我们页面使用的是 UITableViewController 那就更简单了,因为 UITableViewController 已经内置了 refreshControl。我们只需要将其初始化一下即可。比如下面样例我们实现同前面一样的功能。
import UIKit class TableViewController: UITableViewController { //新闻数组集合 var dataArray:[HanggeArticle] = [HanggeArticle]() override func viewDidLoad() { super.viewDidLoad() //初始化刷新 self.refreshControl = UIRefreshControl() self.refreshControl!.addTarget(self, action: #selector(refreshData), for: .valueChanged) self.refreshControl!.attributedTitle = NSAttributedString(string: "下拉刷新数据") refreshData() } // 刷新数据 func refreshData() { //移除老数据 self.dataArray.removeAll() //随机添加5条新数据(时间是当前时间) for _ in 0..<5 { let atricle = HanggeArticle(title: "新闻标题\(Int(arc4random()%1000))", createDate: Date()) self.dataArray.append(atricle) } self.tableView.reloadData() self.refreshControl!.endRefreshing() } override func numberOfSections(in tableView: UITableView) -> Int { return 1 } override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return dataArray.count } // 返回单元格内容 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = UITableViewCell(style: UITableViewCellStyle.subtitle, reuseIdentifier: "myCell") //设置单元格标题 let atricle: HanggeArticle = dataArray[indexPath.row] as HanggeArticle cell.textLabel?.text = atricle.title //设置单元格副标题 let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" let str = dateFormatter.string(from: atricle.createDate) cell.detailTextLabel?.text = str return cell } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } } //新闻结构体 struct HanggeArticle { var title:String var createDate:Date }
在tableviewcontroller里使用,cell行数20,页面就滑动超级慢,去掉UIRefreshControl,恢复正常,什么情况?UIRefreshControl天生卡屏?
如果要是再scrollview上下拉刷新,那也不能用UIRefreshControl吗?我的天。。。第三方的话找不到比较好的
站长你好,如果我是在别的组件上刷新,不会用到UITableViewController该怎么写呢
下拉加载更多怎么实现啊,新手求指导