在我的项目中有大量的UIlabel
。我为UILabel
创建了一个单独的自定义类,并在该类中设置了所有标签的属性。
这里我的主要要求是一些标签的颜色是白色,一些标签的文字颜色是黑色但颜色不适用。
#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];
}
答案 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
。