[Swift通天遁地]二、表格表单-(4)使用系统自带的下拉刷新控件,制作表格的下拉刷新效果

时间:2022-05-29 17:13:52

本文将演示如何使用系统自带的下拉刷新控件,制作表格的下拉刷新效果。

在项目导航区,打开视图控制器的代码文件【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 }