swift swizzling property 交換系統(tǒng)屬性

舉例:交換 UINavigationBar 的系統(tǒng)屬性 titleTextAttributes

let needSwizzleSelectorArr = [
    // 這里我們要交換的是屬性 titleTextAttributes 的 setter 方法
    #selector(setter: titleTextAttributes)
]

for selector in needSwizzleSelectorArr {
    let str = ("wr_" + selector.description)
    let originalMethod = class_getInstanceMethod(self, selector)
    let swizzledMethod = class_getInstanceMethod(self, Selector(str))
    method_exchangeImplementations(originalMethod, swizzledMethod)
}

交換的方法

func wr_setTitleTextAttributes(_ newTitleTextAttributes:[String : Any]?)
{
    guard var attributes = newTitleTextAttributes else {
        return
    }
    
    guard let originTitleTextAttributes = titleTextAttributes else {
        wr_setTitleTextAttributes(attributes)
        return
    }
    
    var titleColor:UIColor?
    for attribute in originTitleTextAttributes {
        if attribute.key == NSForegroundColorAttributeName {
            titleColor = attribute.value as? UIColor
            break
        }
    }
    
    guard let originTitleColor = titleColor else {
        wr_setTitleTextAttributes(attributes)
        return
    }

    if attributes[NSForegroundColorAttributeName] == nil {
        attributes.updateValue(originTitleColor, forKey: NSForegroundColorAttributeName)
    }
    wr_setTitleTextAttributes(attributes)
}


強(qiáng)烈推薦:超簡單?。。?iOS設(shè)置狀態(tài)欄、導(dǎo)航欄按鈕、標(biāo)題、顏色、透明度,偏移等

https://github.com/wangrui460/WRNavigationBar
https://github.com/wangrui460/WRNavigationBar_swift



歡迎關(guān)注我的微博:wangrui460

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容