专业java、php、iOS、C++、网页设计、平面设计、网络营销、游戏开发、前端与移动开发培训机构
上拉加载更多数据
- 目标: 在用户将tableView滚动到最后一个cell的时候,主动去加载更多数据
- 使用 第三方框架
SVPullToRefresh
来实现 在用户将tableView
滚动到最后
一个cell
的时候,主动去加载更多数据 - 在
Podfile
添加pod 'SVPullToRefresh'
内容如下:pod 'SVPullToRefresh'
- 在终端切换到
Podfile
所在目录, 执行pod update
更新Pods
- 在
HMHomeViewController
文件import SVPullToRefresh
SVPullToRefresh
中上拉加载更多
控件相关函数func addInfiniteScrollingWithActionHandler(actionHandler: (() -> Void)!)
添加上拉加载更多控件
事件, 注意: 如果没有添加上拉加载更多控件
事件,上拉加载更多控件
是不会显示出来的.var showsInfiniteScrolling: Bool
: 显示/隐藏上拉加载控件
- 这2个函数都是
UIScrollView
的扩展.
- 在
HMHomeViewController
的prepareTableView
里面添加:上拉加载更多控件
事件// 添加上拉加载更多控件 tableView.addInfiniteScrolling { self.loadMoreStatus() }
实现
loadMoreStatus
方法:/// 加载更多数据 private func loadMoreStatus() -> Void { // 获取微博最小的id let max_id = statusVMs?.last?.status.id ?? 0 // 没有数据 if max_id == 0 { print("id为0不能上拉加载更多数据") return } // 加载更多微博数据 HMStatusListViewModel.shared.loadStatus(since_id: 0, max_id: max_id) { (statusVMs: [HMStatusViewModel]?, error: Error?) in // 停止上拉加载数据动画 self.tableView.infiniteScrollingView.stopAnimating() if error != nil { print("上拉刷新数据失败: \(max_id)") SVProgressHUD.showError(withStatus: "上拉刷新数据失败") return } // 上拉加载数据成功 print("上拉加载数据成功 = \(statusVMs?.count)") self.statusVMs = self.statusVMs! + statusVMs! } }
发现上拉加载出来的第一条数据是重复的,在
HMStatusListViewModel
中的loadStatus
方法里面将parameters["max_id"] = max_id
修改成parameters["max_id"] = max_id - 1
if since_id > 0 { parameters["since_id"] = since_id } else if max_id > 0 { // 别人传递了max_id.添加到字典里面 parameters["max_id"] = max_id - 1 }