Xib、Nib、Storyboard下修改控件边框颜色、大小、圆
问题:
今天有一个页面有很多uibutton,所以就用xib搭了界面,然后问题来了,如何在xib下修改控件的边框颜色和大小、圆角?我之前知道利用IB面板下的“UserDefined Runtime Attributes”(如下图),然后问题来了,设置圆角可以成功设置,但是设置uibutton的边框颜色不行。然后一直百度找到的方法都是跟我的做法一样,而且不行,然后想到我可以Google,好吧,第一条就出来答案了····
IB 下UserDefined Runtime Attributes 面板原因:
找到原因在于borderColor接受的参数是CGColor类型,而此处的Color为UIColor,所以导致注入时参数类型不一致
解决方法:
自定义一个CALayer类别,然后使用这个属性
//CALayer+RumtimeAttribute.h
#import
@interfaceCALayer (RumtimeAttribute)
@property(nonatomic,assign)UIColor* borderIBColor;
@end
//CALayer+RumtimeAttribute.m
#import"CALayer+RumtimeAttribute.h"
@implementationCALayer (RumtimeAttribute)
- (void)setBorderIBColor:(UIColor*)borderIBColor
{
self.borderColor= borderIBColor.CGColor;
}
- (UIColor*)borderIBColor
{
return[UIColor colorWithCGColor:self.borderColor];
}
@end
自定义的时候要注意borderIBColor属性的setter和getter方法的内容不要错了,然后可以完美运行
扩展:在swift 2.0可以用一下方法(我没有试)
import Foundation
extension CALayer{
//解决IB中runtime attribute中layer.borderColor不能转换UIColor为CGColor
var borderColorFromUIColor:UIColor{
set(color){
self.borderColor = color.CGColor;
}
get{
returnUIColor(CGColor:self.borderColor)
}
}
}
最后感谢大神们:Is it possible to set UIView border properties from interface builder?
Expanding User-Defined Runtime Attributes in Xcode with Objective-C
这里有比较有意思的扩展哦,有兴趣的可以看看 Xcode6快捷键、小技巧与xib圆角设置