如果iOS項目中有好多地方會用到下拉刷新暖混,而且不使用默認的MJRefresh樣式的話,當然不想在每個控制器里面都把同樣的代碼再寫一遍硼被,那么一個可行的辦法是繼承食棕。讓用到刷新的控制器繼承自一個基類控制器,在基類里面設置屬性馁痴,基類viewDidLoad()方法中對屬性進行設置谊娇。
MJRefresh的使用方法見 https://github.com/CoderMJLee/MJRefresh
這里假設我們只需要一個箭頭樣式,文字什么的全都去掉罗晕,可以在基類中這樣定義:
BaseViewController:
import UIKit
import MJRefresh
class BaseViewController: UITableViewController {
let header = MJRefreshNormalHeader() // 定義屬性
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.white
// 設置下拉刷新
self.header.lastUpdatedTimeLabel.isHidden = true // 隱藏時間
self.header.stateLabel.isHidden = true // 隱藏文字
self.header.isAutomaticallyChangeAlpha = true //自動更改透明度
}
}
那么繼承自BaseViewController的子類就可以使用header屬性了:
ViewController:
import UIKit
import MJRefresh
class ViewController: BaseViewController {
override func viewDidLoad() {
super.viewDidLoad()
// 設置下拉刷新
self.tableView.mj_header = self.header
self.header.setRefreshingTarget(self, refreshingAction: #selector(self.loadNewData))
self.header.beginRefreshing()
}
func loadNewData() {
// 模擬網(wǎng)絡請求
sleep(2)
print("下拉刷新")
// 假設請求成功, 停止刷新
self.header.endRefreshing()
}
}
大致來說就是把對MJRefreshNormalHeader的設置放到基類中济欢,下拉刷新的業(yè)務邏輯還是放在子類,因為每個控制器要執(zhí)行的操作都不一樣嘛小渊。