如何在 ios 中制作自定义 UILabel
How to make Custom UILabel in ios
在我的项目中有大量 UIlabel
。我为 UILabel
创建了一个单独的自定义 class 并且我在 class.
中设置了所有标签的属性
这里我的主要要求是一些标签的颜色是白色,一些标签的文本颜色是黑色,但颜色不适用。
CustomUILabel class:-
#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
主要class:-
#import "MainViewController.h"
@interface MainViewController (){
}
@end
@implementation MainViewController
@synthesize label1,label2;
- (void)viewDidLoad {
[super viewDidLoad];
label1.textColor = [UIColor whiteColor];
label2.textColor = [UIColor blackColor];
}
问题出在您的 layoutSubview
方法和 setupUI
方法上。
layoutSubviews
不是调用 setupUI
的正确位置。 layoutSubviews
可以被调用多次,并且很可能在 viewDidLoad
被调用之后被调用几次,这就是颜色被重置回黑色的原因。
并且始终在您的 layoutSubviews
方法中调用 [super layoutSubviews];
。
调用您的 setupUI
方法的更好的地方是从一个或多个适当的 init...
方法以及可能的 awakeFromNib
.
当您覆盖 layoutSubviews
时,您必须调用 [super layoutSubviews]
。但这不是你的问题。问题是您在 layoutSubviews
中调用 setupUI
,而您不应该这样做。布局发生在 viewDidLoad
之后,因此当 setupUI
运行时,您在 viewDidLoad
中设置颜色的尝试将在稍后的布局期间被覆盖。
您应该从子类的初始化方法中调用 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;
}
而且您根本不应该在 CustomLabel
中覆盖 layoutSubviews
。
在我的项目中有大量 UIlabel
。我为 UILabel
创建了一个单独的自定义 class 并且我在 class.
这里我的主要要求是一些标签的颜色是白色,一些标签的文本颜色是黑色,但颜色不适用。
CustomUILabel class:-
#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
主要class:-
#import "MainViewController.h"
@interface MainViewController (){
}
@end
@implementation MainViewController
@synthesize label1,label2;
- (void)viewDidLoad {
[super viewDidLoad];
label1.textColor = [UIColor whiteColor];
label2.textColor = [UIColor blackColor];
}
问题出在您的 layoutSubview
方法和 setupUI
方法上。
layoutSubviews
不是调用 setupUI
的正确位置。 layoutSubviews
可以被调用多次,并且很可能在 viewDidLoad
被调用之后被调用几次,这就是颜色被重置回黑色的原因。
并且始终在您的 layoutSubviews
方法中调用 [super layoutSubviews];
。
调用您的 setupUI
方法的更好的地方是从一个或多个适当的 init...
方法以及可能的 awakeFromNib
.
当您覆盖 layoutSubviews
时,您必须调用 [super layoutSubviews]
。但这不是你的问题。问题是您在 layoutSubviews
中调用 setupUI
,而您不应该这样做。布局发生在 viewDidLoad
之后,因此当 setupUI
运行时,您在 viewDidLoad
中设置颜色的尝试将在稍后的布局期间被覆盖。
您应该从子类的初始化方法中调用 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;
}
而且您根本不应该在 CustomLabel
中覆盖 layoutSubviews
。