在表视图中更改默认删除图标的颜色

Eli*_*one 5 uitableview ios swift

我正在寻找一种方法,当表处于编辑模式时,将默认删除图标颜色从红色更改为蓝色.

编辑模式下的表视图

左边的红色图标就是我所说的,并且在将表视图设置为编辑模式时是默认的.

den*_*pro 0

最好将红色图像更改_system.remove为您自己的蓝色图像。

func swizzle() {

    guard let cls = NSClassFromString("UITableViewCellEditControl") else { return }
    let originalSelector = NSSelectorFromString("_updateImageView")
    let swizzledSelector = #selector(UIView._updateImageViewHijack)
    let originMethod = class_getInstanceMethod(cls, originalSelector)
    let swizzleMethod = class_getInstanceMethod(UIView.self, swizzledSelector)
    if let swizzledMethod = swizzleMethod, let originalMethod = originMethod{
        method_exchangeImplementations(originalMethod, swizzledMethod)
    }
    
    
    let originalS = NSSelectorFromString("layoutSubviews")
    let swizzledS = #selector(UIView.layoutSubviewsHijack)
    let originM = class_getInstanceMethod(cls, originalS)
    let swizzleM = class_getInstanceMethod(UIView.self, swizzledS)
    if let swizzledM = swizzleM, let originalM = originM{
        method_exchangeImplementations(originalM, swizzledM)
    }
}
        



extension UIView{
    @objc func _updateImageViewHijack(){
        _updateImageViewHijack()
        for v in subviews{
            if let img = v as? UIImageView{
                img.image = UIImage(named: "one.png")
            }
        }
        
    }
    
    
    @objc func layoutSubviewsHijack(){
        layoutSubviewsHijack()
        for v in subviews{
            if let img = v as? UIImageView{
                img.image = UIImage(named: "one.png")
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

swizzle()应该只调用一次。

结果:

3333


怎么知道UITableViewCellEditControl

99


如何知道 的方法UITableViewCellEditControl

通过runtime

                var count: UInt32 = 0
                guard let methodArr = class_copyMethodList(NSClassFromString("UITableViewCellEditControl"), &count) else { return }
                
                let cnt = Int(count)
                for i in 0..<cnt{
                    let method = methodArr[i]
                    let name = method_getName(method)
                    if let type = method_getTypeEncoding(method){
                        print(name, String(utf8String: type) ?? " _ | _ ")
                    }
                }
Run Code Online (Sandbox Code Playgroud)

如何知道图像的大小_system.remove

99889

6666