我有几个UILabel
s具有相同的视觉处理。我不是每次都重新定义每一个属性,而是考虑复制一个实例并更改文本。这是怎么做的?
另一种方法是创建一个工厂方法,但我不喜欢这个想法。
答案 0 :(得分:6)
如果你愿意学习Three20,你可以使用TTLabel
类,它与Three20的样式表系统结合在一起,它基本上是为解决你的问题而设计的。但是,我个人在解析Three20的所谓文档方面遇到了麻烦,所以我认为学习使用这个库来解决你的问题需要大量的开销。
我解决这个问题的方法是组建一个迷你工厂方法,如下所示:
// Example:
- (UILabel *)makeLabel {
UILabel *label = [[[UILabel alloc] init] autorelease];
label.backgroundColor = [UIColor clearColor];
label.font = [UIFont systemFontOfSize:kMyFontSize];
label.textColor = [UIColor blueColor];
label.textAlignment = UITextAlignmentCenter;
[self.view addSubview:label];
return label;
}
然后,当我使用此方法时,其他代码变得更清晰:
UILabel *nameLabel = [self makeLabel];
nameLabel.text = userName;
UILabel *titleLabel = [self makeLabel];
titleLable.text = myTitle;
// Both labels have consistent style.
PengOne建议继承UILabel。这是一个选择,虽然我认为这种工厂方法能够以较少的工作完成工作。
答案 1 :(得分:0)
您似乎希望子类化UILabel
,以便默认为您的首选项。这很简单。在Xcode(和Objective C Class)中创建一个名为CustomLabel
(或任何你喜欢的)的新文件。
CustomLabel.m:
#import <UIKit/UIKit.h>
@interface CustomLabel : UILabel {
}
@end
CustomLabel.h:
#import "CustomLabel.h"
@implementation CustomLabel
- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
// CUSTOMIZATION HERE
}
return self;
}
- (void)dealloc {
[super dealloc];
}
@end
如果这看起来有点矫枉过正,那么您可以在ViewController中创建一个方法来进行自定义:
-(void)customizeLabel:(UILabel *)label {
// CUSTOMIZATION HERE
}
然后在您创建的任何标签上调用它。