如何在ios

时间:2016-01-06 05:44:20

标签: ios objective-c uilabel

在我的项目中有大量的UIlabel。我为UILabel创建了一个单独的自定义类,并在该类中设置了所有标签的属性。

这里我的主要要求是一些标签的颜色是白色,一些标签的文字颜色是黑色但颜色不适用。

CustomUILabel类: -

#import "CustomLabel.h"

@implementation CustomLabel

-(void)layoutSubviews{

    [self setupUI];
}

- (void)setupUI {

    [self setTextAlignment:NSTextAlignmentLeft];
    [self setFont:[UIFont fontWithName:@"Futura" size:14.0]];
    [self setBackgroundColor:[UIColor clearColor]];
    [self setTextColor:[UIColor blackColor]];
}

@end

主要课程: -

#import "MainViewController.h"

@interface MainViewController (){

}

@end

@implementation MainViewController
@synthesize label1,label2;


- (void)viewDidLoad {
    [super viewDidLoad];

     label1.textColor = [UIColor whiteColor];
     label2.textColor = [UIColor blackColor];
}

2 个答案:

答案 0 :(得分:3)

当您覆盖layoutSubviews时,您必须致电[super layoutSubviews]。但这不是你的问题。问题是您在setupUI中呼叫layoutSubviews,而您不应该。布局在viewDidLoad之后发生,因此,在viewDidLoad运行时,在布局期间,您在setupUI中设置颜色的尝试会被覆盖。

您应该从子类的init方法调用setupUI

- (instancetype)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {
        [self setupUI];
    }
    return self;
}

- (instancetype)initWithCoder:(NSCoder *)aDecoder {
    if (self = [super initWithCoder:aDecoder]) {
        [self setupUI];
    }
    return self;
}

您不应该在layoutSubviews中覆盖CustomLabel

答案 1 :(得分:2)

问题在于您的layoutSubview方法和setupUI方法。

layoutSubviews不适合致电setupUI。可以多次调用layoutSubviews,并且在viewDidLoad被调用后很可能被调用几次,这就是为什么颜色被重置为黑色。

并始终在[super layoutSubviews];方法中致电layoutSubviews

调用setupUI方法的最佳位置来自一个或多个相应的init...方法,可能还有awakeFromNib