// // UITableView-Extension.swift // SwiftDemo // // Created by 王成杰 on 2020/3/7. // Copyright © 2020 . All rights reserved. //
import Foundation
import UIKit
extension UITableView {
open class func inintClass(){
guard self == UITableView.self else {
return
}
hook(self)
}
@objc func wcj_setDelegate(delegate: UITableViewDelegate){
self.wcj_setDelegate(delegate: delegate)
exchangeTableViewDelegate(orignClass: type(of: delegate))
print("天天涨停板")
}
@objc func exchangeTableViewDelegate(orignClass: AnyClass) {
wcj_exchangeMethod(originalClass:orignClass, originalSelector: #selector(UITableViewDelegate.tableView(_:didSelectRowAt:)), replacedClass: UITableView.self, replacedSelector: #selector(tableView(_:wcj_didSelectRowAt:)), addedSelector: #selector(tableView(_:addwcj_didSelectRowAt:)))
}
@objc func tableView(_ tableView: UITableView, addwcj_didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
print("add100000000个涨停")
}
@objc func tableView(_ tableView: UITableView, wcj_didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
self.tableView(tableView, wcj_didSelectRowAt: indexPath)
print("100000000个涨停")
}
@objc func wcj_exchangeMethod(originalClass: AnyClass , originalSelector: Selector, replacedClass: AnyClass ,replacedSelector: Selector, addedSelector: Selector){
let originalMethod = class_getInstanceMethod(originalClass, originalSelector)
let replacedMethod = class_getInstanceMethod(replacedClass, replacedSelector)
guard let method = originalMethod else {
let originReplacedmethod = class_getInstanceMethod(replacedClass, addedSelector)
let isDidAddOriginalMethod: Bool = class_addMethod(originalClass, originalSelector, method_getImplementation(originReplacedmethod!), method_getTypeEncoding(originReplacedmethod!))
if isDidAddOriginalMethod {
//print("did Add Origin Replace Method")
}
return
}
let isDidAddMethod : Bool = class_addMethod(originalClass, replacedSelector, method_getImplementation(replacedMethod!), method_getTypeEncoding(replacedMethod!))
if isDidAddMethod{
let newMethod = class_getInstanceMethod(originalClass, replacedSelector);
// 实现交换
method_exchangeImplementations(originalMethod!, newMethod!);
}else{
}
}
}
private let hook:(UITableView.Type) -> () = { tableview in
swit
let originalMethod = class_getInstanceMethod(tableview, #selector(setter: tableview.delegate))
let hookedMethod = class_getInstanceMethod(tableview, #selector(tableview.wcj_setDelegate(delegate:)))
method_exchangeImplementations(originalMethod!, hookedMethod!)
}
//!的没有加判空一定记的加判空代码