修改xib文件的控件边框颜色, iOS添加category文件

笔者性懒,腹中无墨.
iOS开发, xib是很好用的工具,本文只是指出其中需要注意一点.类似控件的边框大小等不能直接设置的属性,我们会通过key path去设置

修改xib文件的控件边框颜色, iOS添加category文件_第1张图片
keypath.png

边框颜色是默认的黑色, 并不会因此改变. 我们知道边框的颜色是UIColor的CGColor属性, UIColor是UIKit框架中存储颜色的一个重要的类, 而CGColor主要用于CoreGaphics框架之中, CGColor其实是个结构体,而我们通常在使用的CGColor的时候使用的是它的引用类型CGColorRef, 此不多论. 通过key path这种方式设置的颜色其实是UIColor类型, 不会改变边框的颜色, 对于这个问题可以通过代码控制来实现, 也可以通过扩展分类category实现.
OC就是新建Objective-C File,注意File Type是Category,Class是CALayer
修改xib文件的控件边框颜色, iOS添加category文件_第2张图片
OC-Category.png

.h中需要导入框架#import ,增加一个方法

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

.m中实现该方法即可

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

    self.borderColor = color.CGColor;
}

对于swift项目,category只需要些类的延展就可以,新建Swift File, 导入UIKit框架,写一个CALayer的延展extension.这里需要注意的是通过key path设置属性是利用Runtime机制


修改xib文件的控件边框颜色, iOS添加category文件_第3张图片
keypath-的Runtime机制.png

OC 中

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

相当于设置一个 borderColorFromUIColor 的 set 的方法, 可以找个这个keyPath.而swift中若也是这样写

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

只是单纯的swift方法,不是添加属性.所以swift中应该这样添加属性

import UIKit

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

@objc 是让这个属性转换到 OC Runtime 的机制.

end.

你可能感兴趣的:(修改xib文件的控件边框颜色, iOS添加category文件)