本文将演示如何使用系统自带的下拉刷新控件,制作表格的下拉刷新效果。
在项目导航区,打开视图控制器的代码文件【ViewController.swift】
现在开始编写代码,实现表格的下拉刷新功能。
1 import UIKit 2 3 //使当前的视图控制器类,遵循表格的数据源协议UITableViewDataSource和代理协议UITableViewDelegate 4 class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 5 6 //添加一个字符串数组的属性,作为表格的数据来源。 7 var months : Array<String>! 8 //添加一个刷新控件的属性,作为表格的刷新控件。 9 var refreshControl: UIRefreshControl! 10 //添加第三个属性,作为需要添加刷新组件的表格视图 11 var tableView : UITableView! 12 13 override func viewDidLoad() { 14 super.viewDidLoad() 15 // Do any additional setup after loading the view, typically from a nib. 16 17 //对字符串数组属性进行初始化操作,设置表格需要显示的数据 18 months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"] 19 20 //创建一个矩形区域,作为表格视图的显示区域, 21 let rect = CGRect(x: 0, y: 40, width: 320, height: 518) 22 //初始化一个指定显示区域的表格对象 23 tableView = UITableView(frame: rect) 24 25 //设置表格对象的数据源为当前的视图控制器对象 26 tableView.delegate = self 27 //设置表格对象的代理为当前的视图控制器对象 28 tableView.dataSource = self 29 30 //对刷新控件进行初始化操作 31 refreshControl = UIRefreshControl() 32 //给刷新控件绑定值变化的动作, 33 //当刷新控件被调用时,将执行指定的方法。 34 refreshControl.addTarget(self, 35 action: #selector(refreshCallback), 36 for: UIControlEvents.valueChanged) 37 //将刷新控件作为子元素,添加到表格视图中。 38 tableView.addSubview(refreshControl) 39 40 //将表格添加到视图中。 41 self.view.addSubview(tableView) 42 } 43 44 //添加一个代理方法,用来设置表格的行数 45 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 46 { 47 //在此设置表格的行数为数组的长度 48 return months.count 49 } 50 51 //添加一个代理方法,用来初始化或复用表格中的单元格 52 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 53 { 54 //创建一个字符串常量,作为单元格的复用标识 55 let identifier = "reusedCell" 56 //根据复用标识,从表格中获得可以复用的单元格 57 var cell = tableView.dequeueReusableCell(withIdentifier: identifier) 58 59 //如果没有可以复用的单元格 60 if(cell == nil) 61 { 62 //则初始化一个默认样式的单元格,并设置单元格的复用标识 63 cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: identifier) 64 } 65 66 //获得当前单元格的行数 67 let rowNum = (indexPath as NSIndexPath).row 68 //从数组中获得相应的字符串,以设置单元格的标题内容, 69 cell?.textLabel?.text = months[rowNum] 70 71 //最后返回设置好的单元格对象。 72 return cell! 73 } 74 75 //添加一个方法,用来修改表格的数据源 76 func appendData() 77 { 78 //往数组中添加一个新的元素, 79 //并将新元素放在数组的首位。 80 months.insert("Honeymoon", at: 0) 81 } 82 83 //添加一个方法,用来响应刷新控件的交互事件 84 func refreshCallback() 85 { 86 //当刷新控件被成功调用之后, 87 //增加表格的数据源 88 appendData() 89 //让表格对象刷新数据源 90 tableView.reloadData() 91 //终止刷新控件的刷新动作。 92 refreshControl.endRefreshing() 93 } 94 95 override func didReceiveMemoryWarning() { 96 super.didReceiveMemoryWarning() 97 // Dispose of any resources that can be recreated. 98 } 99 }