美文网首页
swift-刷新

swift-刷新

作者: money_ac9e | 来源:发表于2018-09-03 10:23 被阅读0次

一、swift 中使用MJRefresh

MJRefresh虽然是OC版本的,但确能在swift项目中直接使用并不用进行桥接

创建

        //特殊刷新
        //tableView?.mj_header = URefreshHeader()
        
        //普通刷新
        tableView?.mj_header = MJRefreshStateHeader()
        tableView?.mj_header.setRefreshingTarget(self, refreshingAction: #selector(loadNewData))
        
        tableView?.mj_footer = MJRefreshAutoNormalFooter()
        tableView?.mj_footer.setRefreshingTarget(self, refreshingAction: #selector(loadMoreData))

请求数据

@objc func loadNewData() {
        // 模拟数据延时
        DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
            self.loadData()
        }
    }
    
    @objc func loadMoreData() {
        //模拟数据延时
        DispatchQueue.main.asyncAfter(deadline: DispatchTime.now()+2) {
            
            print("开始加载数据")
            // 上拉加载
            for _ in 0..<10 {
                self.listArr.append("hehe-\(arc4random()%9999)")
            }
            self.tableView?.mj_footer.endRefreshing()
            // 刷新数据
            self.tableView?.reloadData()
            print("结束加载数据")
        }
        
    }

二、swift使用自带的UIRefreshControl
系统自带的刷新,比较难用,这里简单介绍一下
1.声明属性

//数组
var listArr:[String] = []
//刷新
var refreshControl : UIRefreshControl?
//上拉 还是下拉
var isPullUp = false

2.设置刷新控件

// 设置刷新控件
refreshControl = UIRefreshControl()
tableview?.addSubview(refreshControl!)
refreshControl?.addTarget(self, action: #selector(loadData), for: .valueChanged)
        
refreshControl?.addTarget(self, action: #selector(loadData), for: UIControlEvents.valueChanged)
refreshControl?.backgroundColor = UIColor.init(red: CGFloat(arc4random()%255)/255.0, green: CGFloat(arc4random()%255)/255.0, blue: CGFloat(arc4random()%255)/255.0, alpha: 1)

let attributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
refreshControl?.attributedTitle = NSAttributedString(string: "Last updated on \(NSDate())", attributes: attributes)
        
refreshControl?.tintColor = UIColor.white
 tableview?.addSubview(self.refreshControl!)

3.模拟请求数据

@objc func loadData() {
        
        // 模拟数据延时
        DispatchQueue.main.asyncAfter(wallDeadline: .now() + 2) {
            print("开始加载数据")
            if self.isPullUp { // 上提加载
                for _ in 0..<10 {
                    self.listArr.append("addadd-\(arc4random()%9999)")
                }
            }else { // 下拉刷新
                self.listArr.removeAll()
                for _ in 0..<10 {
                    self.listArr.append("hehe-\(arc4random()%9999)")
                }
            }
            
            print("==========\(self.isPullUp)")
            self.isPullUp = false
            // 结束刷新
            self.refreshControl?.endRefreshing()
            // 刷新数据
            self.tableview?.reloadData()
            print("结束加载数据")
        }

}

4.判断是上拉,还是下拉

// 上拉需要做无缝刷新,使用下面的方法:判断是不是最后一个 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()
        }
    }

三、比较好玩的刷新功能
有兴趣可以看下面的demo

参考链接:iOS开发中MJRefresh在swift项目中的简单使用
demo下载

相关文章

网友评论

      本文标题:swift-刷新

      本文链接:https://www.haomeiwen.com/subject/hufqwftx.html