项目开发中常需要站位图,如tableview,但是项目开发到中途,可能有几百个tableview在你到项目里。
这里我采用到办法是写一个extension,实现一个类方法。在appdelegate中调用这个类方法实现。代码如下:
extension UITableView {
/// 类方法实现runtime的方法交换,处理tableview没有数据时的背景图
public class func initializeMethod() {
let originalSelector = #selector(UITableView.reloadData)
let swizzledSelector = #selector(jc_reloadData)
// runtime获取函数方法
let originalMethod = class_getInstanceMethod(self, originalSelector)
let swizzledMethod = class_getInstanceMethod(self, swizzledSelector)
method_exchangeImplementations(originalMethod!, swizzledMethod!)
}
@objc func jc_reloadData(){
self.jc_reloadData()
let number = self.numberOfSections
var havingData = false
for i in 0..<number {
if self.numberOfRows(inSection: i) > 0{
havingData = true
break
}
}
if havingData {
self.backgroundView = UIImageView()
}else{
self.backgroundView = UIImageView.init(image: UIImage.init(named: "drawing_no_duty"))
self.backgroundView?.contentMode = .center
}
}
}
在appdelegate中调用
UITableView.initializeMethod()