所以我的代码中有这样的东西:
leftMostLabel = [[UILabel alloc] initWithFrame:CGRectMake(60.0f, 2.0f, 80.0f, 40.0f)];
leftMostLabel.text = @"Some text";
leftMostLabel.textColor = [UIColor colorWithWhite:1.0 alpha:1.0];
leftMostLabel.backgroundColor = [UIColor clearColor];
leftMostLabel.textAlignment = UITextAlignmentCenter;
leftMostLabel.font = [UIFont boldSystemFontOfSize:13.0];
leftMostLabel.userInteractionEnabled = NO;
centerLeftLabel = [[UILabel alloc] initWithFrame:CGRectMake(115.0f, 2.0f, 80.0f, 40.0f)];
centerLeftLabel.text = currentDate;
centerLeftLabel.textColor = [UIColor colorWithWhite:1.0 alpha:1.0];
centerLeftLabel.backgroundColor = [UIColor clearColor];
centerLeftLabel.textAlignment = UITextAlignmentCenter;
centerLeftLabel.font = [UIFont systemFontOfSize:12.0];
centerLeftLabel.userInteractionEnabled = NO;
哪个工作正常,花花公子,但我多次重复这种格式。理想情况下,我希望将变量(leftMostLabel,centerLeftLabel等)传递给一个函数,该函数根据我传递给它的名称在幕后为我创建标签,如以及我喂它的任何附加参数。这可能吗?如果是这样,我将如何解决这个问题?
提前致谢!
答案 0 :(得分:3)
Objective-C提供了通过类别扩展现有类的可能性,因此您可以轻松地向UILabel添加方法,例如:+labelWithFrame:text:textColor:backgroundColor:alignment:font:interaction:
。这会缩短一点,所以你的代码看起来像:
UILabel *leftLabel = [UILabel labelWithFrame:CGRectMake(...)
text:@"Yoo hoo!"
textColor:[UIColor blueColor]
backgroundColor:[UIColor clearColor]
textAlignment:UITextAlignmentLeft
font:[UIFont systemFontOfSize:12];
userInteractionEnabled:NO];
这看起来有点混乱,可能是值得的。
如果您的大多数标签相似,则另一个选项是添加使用原型创建标签的方法。 UIView不实现NSCopying,因此您不能使用-copy方法复制标签,但您可以编写一个方法来创建新标签并根据现有标签对其进行配置。调用它可能看起来像:
UILabel *centerLabel = [UILabel labelWithFrame:CGRectMake(...)
likeLabel:leftLabel];
centerLabel.text = @"Hey there!";
最后,考虑使用Interface Builder创建所有这些标签。 Cocoa和Cocoa Touch代码将充满调用查看配置方法,如-initWithFrame:和-addSubview:如果不是IB。它可能适用于您的情况,也可能不适合,但有时人们会避免使用IB,因为他们认为这样做更多,或者使代码更难以管理;我认为情况恰恰相反。
答案 1 :(得分:2)
简明扼要地说,有一个词你不会经常与Objective-C一起看到。来自另一种语言,我觉得你的痛苦就像这些片段一样。
我曾经尝试过编写必要的标签变体,然后重复多次。其他发布的答案都是可行的选择,虽然我不太确定简明的论点。 @Caleb的'likeLabel'答案是最通用的,但你仍然需要能够引用其他标签。
我在UILabel上制作了一个特定于项目的类别,并将各种标签放在我自己的位置。我唯一能为每个标签重复的是框架和文字。将+方法放在一个类别中并不是很有必要,但UILabel确实总结了你想要的东西。在确定了类别后,您就可以使用它了:
UILabel *someLabel = [UILabel headerLabelWithFrame:CGRectMake(10, 10, 256, 32) andText:@"Conciseness"];
这就是只有一种标签类型的类别。如果需要,你可以添加更多:
@interface UILabel (ProjectSpecificLabels)
+(UILabel *)headerLabelWithFrame:(CGRect)frame andText:(NSString *)text;
@end
@implementation UILabel (ProjectSpecificLabels)
+(UILabel *)headerLabelWithFrame:(CGRect)frame andText:(NSString *)text {
UILabel *label = [[[self alloc] initWithFrame:frame] autorelease];
label.text = text;
label.textColor = [UIColor colorWithWhite:1.0 alpha:1.0];
label.backgroundColor = [UIColor clearColor];
label.textAlignment = UITextAlignmentCenter;
label.font = [UIFont boldSystemFontOfSize:13.0];
label.userInteractionEnabled = NO;
return label;
}
@end
希望它有所帮助。
干杯,
EP。
答案 2 :(得分:1)
我会把它分解成一个设置我的值的函数。
leftMostLabel = [[UILabel alloc] initWithFrame:CGRectMake(60.0f, 2.0f, 80.0f, 40.0f)];
leftMostLabel.text = @"Some text";
[self initLabelValues:leftMostLabel withFont:[UIFont boldSystemFontOfSize:13.0]];
centerLeftLabel = [[UILabel alloc] initWithFrame:CGRectMake(115.0f, 2.0f, 80.0f, 40.0f)];
centerLeftLabel.text = currentDate;
[self initLabelValues:centerLeftLabel withFont:[UIFont boldSystemFontOfSize:12.0]];
-(void) initLabelValues:(UILabel*)inLabel withFont:(UIFont*)font {
[inLabel setTextColor:[UIColor colorWithWhite:1.0 alpha:1.0]];
[inLabel setBackgroundColor:[UIColor clearColor]];
[inLabel setTextAlignment:UITextAlignmentCenter];
[inLabel setUserInteractionEnabled:NO];
[inLabel setFont:font];
}