MJRefresh-Swift版本--JRefresh

JRefresh

介紹

這是MJRefresh的swift版本,先OC原版奉上MJRefresh,JRefresh爲純Swift版本,支持swift3.2以上,iOS8.0以上版本。代碼邏輯和MJRefresh基本如出一轍,原本一開始打算用swift的面向協議思想改寫的,發現行不通只好用原做者如出一轍的繼承思想翻譯成Swift。JRefresh剔除了原有的過時方法,也沒有Selector調用方法(不想再混入OC文件,swift不支持objc_msgSend),只剩下閉包調用。JRefresh github地址git

爲什麼寫這個

  • 因爲項目使用swift語言開發原來越多。但OC和swift混編要橋接文件,編譯慢,沒法達到純正的swift第三方效果。(我的潔癖哈,使用pod還好,假如拖入項目的那一大堆.h.m文件實在難受)。能夠讓只會swift語言的孩子查看源代碼哈(雖然這樣的孩子很少~)
  • 項目中一直在用MJRefresh,但沒有翻譯一遍來的理解透徹。
  • 本身學習提升咯。後期能夠豐富更多個性化功能~

使用方法

支持swift3.2 以上, iOS版本8.0以上github

  • 使用cocoapods

pod JRefreshswift

  • 下載demo,直接將JRefresh文件夾拖到項目中使用

具體方法

總架構.png
沒錯,比MJRefresh少了 backFooter,主要是一直沒有用到過(一次都沒啊~),因此暫時給取消了,假如反應的人多,下個版本就給加上
文件目錄.png
這些反正和MJRefresh如出一轍(就是照着他翻譯過來的哈)

效果展現

  • 默認下拉(只有刷新時間、狀態)
tableView.header = JRefreshStateHeader.headerWithRefreshingBlock({[weak self] in
                guard let `self` = self else {return}
                DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 3, execute: {
                    self.count += 2
                    self.tableView.reloadData()
                    self.tableView.header?.endRefreshing()
                })
            })
tableView.header?.beginRefreshing()
複製代碼

默認下拉(只有刷新時間、狀態).gif

  • 下拉帶菊花、箭頭
tableView.header = JRefreshNormalHeader.headerWithRefreshingBlock({[weak self] in
                guard let `self` = self else {return}
                DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 3, execute: {
                    self.count += 2
                    self.tableView.reloadData()
                    self.tableView.header?.endRefreshing()
                })
            })
tableView.header?.beginRefreshing()
複製代碼

下拉帶菊花、箭頭.gif

  • GIF 刷新
tableView.header = JChiBaoZiHeader.headerWithRefreshingBlock({[weak self] in
                guard let `self` = self else {return}
                DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 3, execute: {
                    self.count += 2
                    self.tableView.reloadData()
                    self.tableView.header?.endRefreshing()
                })
            })
tableView.header?.beginRefreshing()
複製代碼

GIF 刷新.gif

  • 下拉刷新 自定義文字
let header = JRefreshNormalHeader.headerWithRefreshingBlock({[weak self] in
                guard let `self` = self else {return}
                DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 3, execute: {
                    self.count += 2
                    self.tableView.reloadData()
                    self.tableView.header?.endRefreshing()
                })
            })
            // 設置文字
            (header as! JRefreshNormalHeader).setTitle("lee", .Idle)
            (header as! JRefreshNormalHeader).setTitle("jiang", .Pulling)
            (header as! JRefreshNormalHeader).setTitle("bo", .Refreshing)
            // 設置字體
            (header as! JRefreshNormalHeader).stateLabel.font = UIFont.systemFont(ofSize: 16)
            (header as! JRefreshNormalHeader).lastUpdatedTimeLabel.font = UIFont.systemFont(ofSize: 14)
            // 設置顏色
            (header as! JRefreshNormalHeader).stateLabel.textColor = UIColor.red
            (header as! JRefreshNormalHeader).lastUpdatedTimeLabel.textColor = UIColor.blue
            header.beginRefreshing()
            tableView.header = header
複製代碼

下拉刷新 自定義文字.gif

  • 上拉帶loading
tableView.footer = JRefreshAutoNormalFooter.footerWithRefreshingBlock({[weak self] in
                guard let `self` = self else {return}
                DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 3, execute: {
                    self.count += 2
                    self.tableView.reloadData()
                    self.tableView.footer?.endRefreshing()
                })
            })
複製代碼

上拉帶loading.gif

  • 上拉Gif(無文字狀態)
tableView.footer = JChiBaoZiFooter.footerWithRefreshingBlock({[weak self] in
                guard let `self` = self else {return}
                DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 3, execute: {
                    self.count += 5
                    self.tableView.reloadData()
                    self.tableView.footer?.endRefreshing()
                    if self.count >= 40 {
                        self.tableView.footer?.endRefreshingWithNoMoreData()
                    }
                })
            })
            (tableView.footer as? JRefreshAutoGifFooter)?.refreshingTitleHidden = true
複製代碼

上拉Gif(無文字狀態).gif

  • 自定義上拉視圖
tableView.footer = JDIYAutoFooter.footerWithRefreshingBlock({[weak self] in
                guard let `self` = self else {return}
                DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 3, execute: {
                    self.count += 5
                    self.tableView.reloadData()
                    self.tableView.footer?.endRefreshing()
                    if self.count >= 40 {
                        self.tableView.footer?.endRefreshingWithNoMoreData()
                    }
                })
            })
複製代碼

自定義上拉視圖.gif

  • 更多demo
    更多demo.png

歡迎使用,有任何bug,但願給我提Issues~

相關文章
相關標籤/搜索