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

Posted

技术标签:

【中文标题】更改表格视图中默认删除图标的颜色【英文标题】:Change colour of the default delete icon in Table view 【发布时间】:2016-02-09 21:47:39 【问题描述】:

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

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

【问题讨论】:

也许对您有帮助? ***.com/questions/27163171/… 或者这个:***.com/questions/24142591/… 这些都没有提到当表格视图设置为编辑时显示的默认图标。 或许这篇文章对你有帮助:vinsol.com/blog/2015/01/06/… 【参考方案1】:

最好把红色图片_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")
            
        
    

swizzle() 只能调用一次。

结果:


怎么知道UITableViewCellEditControl


如何知道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) ?? " _ | _ ")
                    
                

如何知道图片_system.remove的大小?

【讨论】:

以上是关于更改表格视图中默认删除图标的颜色的主要内容,如果未能解决你的问题,请参考以下文章

在编辑模式下禁用表格视图单元格突出显示的颜色?

更改表格视图单元格选择颜色

更改传单标记群集图标颜色,继承其余默认 CSS 属性

在 Android Studio 默认模板中更改导航抽屉图标的颜色

选项卡图标在 iOS 4 上更改默认颜色

如何删除 vuetify 自动完成组件默认图标