Swift:V2下拉上拉模块

 

 

下拉模块实现的具体代码:

override func viewDidLoad() {   
        self.view.addSubview(self.tableView)
        self.tableView.snp.makeConstraints { (make) in
            make.edges.equalTo(self.view)
        }
        
        self.tableView.mj_header = V2RefreshHeader.init(refreshingBlock: {
            //下拉事假触发后,会执行这里
            self.refresh()
        })
        
//代码触发下拉事件(也可以通过手势下拉)
        self.tableView.mj_header.beginRefreshing()
}

注意,V2RefreshHeader是自定义的Header对象,也可以是用系统默认的MJRefreshNormalHeader

header回调闭包里的代码:

    func refresh() {
        //传入参数都是函数默认参数
        TopicListModel.getTopicList { (response) in
            //1.获取数据,更新tableView
            self.topicList = response.value
            self.tableView.reloadData()
            
            /**
             2.判断标签是否能加载下一页,不能就提示
             说明:为什么这段代码放在header的回调里。因为每当我们手动下拉,或者代码调用下拉后,会执行header回调,那么每次都要判断节点是不是翻页的功能
             */
            let refreshFooter = self.tableView.mj_footer as! V2RefreshFooter
            if self.tab == nil || self.tab == "all" {
                refreshFooter.noMoreDataStateString = nil
                refreshFooter.resetNoMoreData()
            }
            else{
                refreshFooter.noMoreDataStateString = "没有更多帖子了,只有【All】标签能翻页"
                refreshFooter.endRefreshingWithNoMoreData()
            }
            
            //3.重置page
            self.currentPage = 0
            
            self.tableView.mj_header.endRefreshing()
        }
    }
    

 

 

上拉添加更多模块代码:

        self.view.addSubview(self.tableView)
        self.tableView.snp.makeConstraints { (make) in
            make.edges.equalTo(self.view)
        }
        let footer = V2RefreshFooter(refreshingBlock: {
           self.getNextPage()
        })
        footer?.centerOffset = -4
        self.tableView.mj_footer = footer

这里的V2RefreshFooter也是自定义的footer。

 

footer闭包代码:

    func getNextPage() {
        //1.点击某个节点后,下拉刷新结果是每有数据,那么上拉是没有意义的。
        if let count = self.topicList?.count, count <= 0 {
            self.tableView.mj_footer.endRefreshing()
            return;
        }
        
        //2.一般默认下拉获取数据时,传入的currentPage是0,那么获取第二页内容,传入的currentPage是1.
         self.currentPage += 1
        TopicListModel.getTopicList(tab: tab, page: self.currentPage) { (response:V2ValueResponse<[TopicListModel]>) in
            if response.success {
                //3.获取的数据如果是空,表示全部获取,代码不会进入if
                if let count = response.value?.count, count > 0 {
                    //4.注意这里用的是数组的拼接,这样可以实现主页的下拉样式,而不是翻页样式
                    self.topicList! += response.value!
                    self.tableView.reloadData()
                }
            }
            else{
                //5.获取失败。
                self.currentPage -= 1
            }
        }
        //6.停止刷新
        self.tableView.mj_footer.endRefreshing()
    }

 

转载于:https://my.oschina.net/u/2943743/blog/865412

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值