2011-07-01 46 views
2

我有几个UILabel s有相同的视觉治疗。我没有每次重新定义每一个属性,而是在考虑只复制实例并更改文本。这是应该如何完成的?重新使用UILabel风格的正确方法是什么?

另一种方法是创建一个工厂方法,但我不喜欢这个想法。

+0

方法/功能/ MACRO:你选择 - 当我在InterfaceBuilder中创建它们时,我肯定复制它们,但我不想在代码中做它(从来不是“原型”风扇) - 但我大多避免在代码中创建UILabels。 – bshirley

+0

附录:我有'UITableViewCell'的子类在六个前端修改了它们所包含的'UITextField's(当进入/退出编辑模式时) - 复制不会将其切割到那里, – bshirley

回答

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。这是一个选择,但我认为这种工厂方法在减少工作的同时也能完成这项工作。

+0

PS如果您使用这样的代码,不要忘记在某处设置标签的框架。 – Tyler

+0

谢谢@泰勒。我对Three20很好奇。有人说这是一种矫枉过正,但该网站说,你可以选择和选择哪个模块。 – pixelfreak

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 
} 

然后在您创建的任何标签上调用此项。

+0

我不认为数量的造型保证一个子类。这真的只是颜色/背景/字体/阴影 – pixelfreak

+0

@pixelfreak:如果你想使用它不止两次,并希望能够在以后的日子应用通用的变化,那么这是做到这一点的最佳方式。否则,您必须每次都复制并粘贴相同的代码,这很好,但这不会产生很多开销。 – PengOne

相关问题