正确施放UILabel

时间:2014-01-15 11:03:14

标签: ios casting uilabel

我已经创建了UILabel的自定义子类GTLabel,以获得正确的字体,大小,颜色等......

当我以编程方式创建GTLabel时,一切正常。当我在IB中创建UILabel时,我只需将其类更改为GTLabel即可。

现在,当我有一个带有titleLabel的UIButton时,我想将这个UILabel转换为GTLabel。

我在GTLabel中创建了一个类方法:

+ (GTLabel*)labelFromLabel:(UILabel*)label
{
    ...

    return myGTLabel;
}

我真的没有看到我想如何继续这种方法。

我是否应该如吼一样?

GTLabel *myGTLabel = [[GTLabel alloc] init];
// Get all the properties of the original label
myGTLabel.text = label.text;
myGTLabel.frame = label.frame;
// Do the modifications 
myGTLabel.font = [UIFont fontWithName:@"Gotham-Light"
                                 size:label.font.pointSize];

这个想法是做一些像

这样的事情
myButton.titleLabel = [GTLabel labelFromLabel:myButton.titleLabel];

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

您可以实现自定义UIButton(例如GTButton)并重新定义titleLabel属性,设置用于GTLabel的相同属性标签

类似的东西:

#import "GTButton.h"

@implementation GTButton

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}


-(UILabel *)titleLabel
{
    UILabel* parentLabel = [super titleLabel];

    parentLabel.font = [UIFont fontWithName:@"Gotham-Light"
                                     size:parentLabel.font.pointSize];
    // ... set all your attributes

    return parentLabel;
}

@end

答案 1 :(得分:1)

UIButton的

titleLabel 方法是只读的。

虽然此属性是只读的,但它自己的属性是可读/写的。主要使用这些属性来配置按钮的文本。

例如:

UIButton *button                  = [UIButton buttonWithType: UIButtonTypeSystem];
button.titleLabel.font            = [UIFont systemFontOfSize: 12];
button.titleLabel.lineBreakMode   = UILineBreakModeTailTruncation;

在为其中的label和set属性创建时为UIButton创建自定义类。