舉例:交換 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