我计划将UITextField子类化,以便我可以全局自定义应用程序中文本字段的外观。基于我们的模型中的设计,文本字段应该有一个绿色边框,我已经为我的一个文本字段做了。 (来源:https://stackoverflow.com/a/5749376/334545)
我还更改了占位符颜色,如下所示:https://stackoverflow.com/a/19852763/334545
但所有这些仅适用于一个文本字段。我希望我的所有其他文本域都有这个,所以我尝试通过创建一个我尝试使用的新uitextfield类进行子类化。我将上述方法添加到MYUITextField.m
的initWithFrame方法中:
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
UIColor *greenColor = [UIColor colorWithRed:122.0/255.0 green:168.0/255.0 blue:73.0/255.0 alpha:1.0];
UIColor *greyColor = [UIColor colorWithRed:87.0/255.0 green:87.0/255.0 blue:87.0/255.0 alpha:1.0];
self.layer.borderColor=[greenColor CGColor];
self.layer.borderWidth= 1.0f;
self.attributedPlaceholder = [[NSAttributedString alloc] initWithString:@"" attributes:@{NSForegroundColorAttributeName: greyColor}];
}
return self;
}
我应该只更改drawRect方法吗?应用程序会因此而变慢吗?
答案 0 :(得分:2)
使用NIB时,您需要告诉资源您的自定义类。
将自定义类设置为 MYUITextField ,如下所示:
如果使用资源,请覆盖-awakeFromNib
而不是-initWithFrame:
:
-(void)awakeFromNib
{
[super awakeFromNib];
self.layer.borderColor=[[UIColor greenColor] CGColor];
self.layer.borderWidth= 1.0f;
self.attributedPlaceholder = [[NSAttributedString alloc]
initWithString:@""
attributes:@{NSForegroundColorAttributeName:
[UIColor greyColor]}];
}
有关详细信息,请参阅init and awakeFromNib。
答案 1 :(得分:1)
我相信你这样做会更有效率。 -drawRect:
可以多次调用。通过设置-initWithFrame:
中的值,您只能确保只设置一次。
话虽如此,我很确定性能差异可以忽略不计。
编辑:如果你以编程方式做事,那就是这样。如果使用笔尖或故事板,请使用方法-awakeFromNib
。