修改xib文件的控件邊框顏色, iOS添加category文件

筆者性懶,腹中無墨.
iOS開發(fā), xib是很好用的工具,本文只是指出其中需要注意一點.類似控件的邊框大小等不能直接設(shè)置的屬性,我們會通過key path去設(shè)置

keypath.png

邊框顏色是默認的黑色, 并不會因此改變. 我們知道邊框的顏色是UIColor的CGColor屬性, UIColor是UIKit框架中存儲顏色的一個重要的類, 而CGColor主要用于CoreGaphics框架之中, CGColor其實是個結(jié)構(gòu)體,而我們通常在使用的CGColor的時候使用的是它的引用類型CGColorRef, 此不多論. 通過key path這種方式設(shè)置的顏色其實是UIColor類型, 不會改變邊框的顏色, 對于這個問題可以通過代碼控制來實現(xiàn), 也可以通過擴展分類category實現(xiàn).
OC就是新建Objective-C File,注意File Type是Category,Class是CALayer
OC-Category.png

.h中需要導(dǎo)入框架#import <UIKit/UIKit.h>,增加一個方法

- (void)setBorderColorFromUIColor:(UIColor *)color; 

.m中實現(xiàn)該方法即可

 - (void)setBorderColorFromUIColor:(UIColor *)color {

    self.borderColor = color.CGColor;
}

對于swift項目,category只需要些類的延展就可以,新建Swift File, 導(dǎo)入UIKit框架,寫一個CALayer的延展extension.這里需要注意的是通過key path設(shè)置屬性是利用Runtime機制


keypath-的Runtime機制.png

OC 中

- (void)setBorderColorFromUIColor:(UIColor *)color; 

相當(dāng)于設(shè)置一個 borderColorFromUIColor 的 set 的方法, 可以找個這個keyPath.而swift中若也是這樣寫

func setBorderColorFromUIColor(color: UIColor){
    
    self.borderColor = color.cgColor    
}

只是單純的swift方法,不是添加屬性.所以swift中應(yīng)該這樣添加屬性

import UIKit

extension CALayer {
    @objc var borderColorFromUIColor: UIColor {
        set {
            self.borderColor = newValue.cgColor
        }
        get {
            return UIColor.clear
        }
    }
}

@objc 是讓這個屬性轉(zhuǎn)換到 OC Runtime 的機制.

end.

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

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

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