XZ_Swift之使用苹果原生UIRefreshControl实现下拉刷新和上拉加载
2017-12-06 11:46
411 查看
实现的效果图
系统的 UIRefreshControl 的属性很少,就只有下面几个:
isRefreshing: Bool 判断是否正在刷新
tintColor: UIColor! 修改菊花的颜色,默认是灰色的
attributedTitle: NSAttributedString? 给刷新添加文字显示
beginRefreshing() 开始刷新
endRefreshing() 结束刷新
因为 UIRefreshControl 是继承自 UIControl,所有UIControl 的方法,他都可以使用,常用的有 添加事件
addTarget(_ target: Any?, action: Selector, for controlEvents: UIControlEvents)
实现的主要核心处理部分是上拉加载:上拉加载需要做无缝加载,需要判断是不是最后一个 section 的最后一行,如果是,拖拽时进行 上拉加载 并刷新页面
代码实现:
系统的 UIRefreshControl 的属性很少,就只有下面几个:
isRefreshing: Bool 判断是否正在刷新
tintColor: UIColor! 修改菊花的颜色,默认是灰色的
attributedTitle: NSAttributedString? 给刷新添加文字显示
beginRefreshing() 开始刷新
endRefreshing() 结束刷新
因为 UIRefreshControl 是继承自 UIControl,所有UIControl 的方法,他都可以使用,常用的有 添加事件
addTarget(_ target: Any?, action: Selector, for controlEvents: UIControlEvents)
实现的主要核心处理部分是上拉加载:上拉加载需要做无缝加载,需要判断是不是最后一个 section 的最后一行,如果是,拖拽时进行 上拉加载 并刷新页面
代码实现:
private let cellId = "XZTableViewCell" class ViewController: UIViewController { private var tableView: UITableView? // 懒加载数据数组 private lazy var dataArr = [String]() // 判断是否是上提加载 var isPullUp = false // 刷新控件 var refreshControl: UIRefreshControl? override func viewDidLoad() { super.viewDidLoad() // 设置页面 setupUI() // 加载数据 loadData() } @objc private func loadData() { // 模拟数据延时 DispatchQueue.main.asyncAfter(wallDeadline: .now() + 2) { print("开始加载数据") if self.isPullUp { // 上提加载 for i in 0..<20 { self.dataArr.append("加载 - 第\(i.description)行") } }else { // 下拉刷新 self.dataArr.removeAll() for i in 0..<20 { self.dataArr.append("第\(i.description)行") } } print("==========\(self.isPullUp)") self.isPullUp = false // 结束刷新 self.refreshControl?.endRefreshing() // 刷新数据 self.tableView?.reloadData() print("结束加载数据") } } } // MARK: - 设置页面 extension ViewController { private func setupUI() { // 初始化tableView tableView = UITableView(frame: view.bounds, style: .plain) view.addSubview(tableView!) tableView?.backgroundColor = .white tableView?.delegate = self tableView?.dataSource = self tableView?.register(UITableViewCell.self, forCellReuseIdentifier: cellId) // 设置刷新控件 refreshControl = UIRefreshControl() tableView?.addSubview(refreshControl!) refreshControl?.addTarget(self, action: #selector(loadData), for: .valueChanged) } } // MARK: - UITableViewDelegate,UITableViewDataSource extension ViewController: UITableViewDelegate,UITableViewDataSource { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return dataArr.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) cell.textLabel?.text = dataArr[indexPath.row] return cell } // 上拉需要做无缝刷新,使用下面的方法:判断是不是最后一个 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() } } }
相关文章推荐
- Android中使用RecyclerView实现下拉刷新和上拉加载
- 使用PullToRefresh实现下拉刷新和上拉加载
- 使用PullToRefresh实现下拉刷新和上拉加载
- 使用SwipeRefreshLayout实现下拉刷新与上拉加载更多
- 使用PullToRefresh实现下拉刷新和上拉加载
- 使用SwipeRefreshLayout实现下拉刷新与上拉加载更多
- 使用PullToRefresh实现下拉刷新和上拉加载
- 使用SwipeRefreshLayout和自定义的PullToReFreshListView实现下拉刷新和上拉加载更多
- 使用PullToRefresh实现下拉刷新和上拉加载
- 使用PullToRefresh实现下拉刷新和上拉加载
- 使用PullToRefresh实现下拉刷新和上拉加载
- 使用PullToRefresh实现下拉刷新和上拉加载
- 使用PullToRefresh实现下拉刷新和上拉加载
- android 使用PullToRefresh实现下拉刷新和上拉加载更多
- 使用SwipeRefreshLayout和RecyclerView实现仿“简书”下拉刷新和上拉加载更多
- 使用PullToRefresh实现下拉刷新和上拉加载
- 使用PullToRefresh实现下拉刷新和上拉加载
- Android程序开发之使用PullToRefresh实现下拉刷新和上拉加载
- 4.5.1 Good 使用PullToRefresh实现下拉刷新和上拉加载
- 使用PullToRefresh实现下拉刷新和上拉加载