我已经创建了一个UIButton的子类,为它提供了一个白色的2px No Radii边框,现在我试图“全局”设置它的字体,字体颜色和背景颜色,具体取决于按钮状态。
字体未设置。颜色或背景颜色也没有。这是怎么回事?这是我的代码。我希望你能帮忙:)。
- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
[[self titleLabel] setFont:[UIFont fontWithName:@"ZegoeUI" size:18]];
[self setTitleColor:[UIColor blackColor] forState:UIControlStateHighlighted];
[self setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
if(self.state == UIControlStateHighlighted) {
[self setBackgroundColor:[UIColor whiteColor]];
}
else {
[self setBackgroundColor:[UIColor blackColor]];
}
}
return self;
}
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
[self.layer setMasksToBounds:YES];
[self.layer setBorderWidth:2.0];
[self.layer setCornerRadius:0.0];
[self.layer setBorderColor:[[UIColor colorWithWhite:1.0 alpha:1.0] CGColor]];
}
我认为我做错了什么。我有这个类,并在IB中链接了按钮,并设置了类类型...
谢谢,
奔奔
答案 0 :(得分:17)
如果您在IB中创建了自定义子类按钮,则不会调用initWithFrame:
。您需要覆盖initWithCoder:
,或者最好创建一个从initWithFrame:
和initWithCoder:
同时调用的单独设置方法。
对于第一种情况:
- (id)initWithCoder:(NSCoder*)coder {
self = [super initWithCoder:coder];
if (self) {
[[self titleLabel] setFont:[UIFont fontWithName:@"ZegoeUI" size:18]];
[self setTitleColor:[UIColor blackColor] forState:UIControlStateHighlighted];
[self setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
if(self.state == UIControlStateHighlighted) {
[self setBackgroundColor:[UIColor whiteColor]];
}
else {
[self setBackgroundColor:[UIColor blackColor]];
}
}
return self;
}
答案 1 :(得分:1)
这是我如何做到的(没有IB):
+ (instancetype)customButtonWithCustomArgument:(id)customValue {
XYZCustomButtom *customButton = [super buttonWithType:UIButtonTypeSystem];
customButton.customProperty = customValue;
[customButton customFunctionality];
return customButton;
}
也适用于其他类型,UIButtonTypeSystem
只是一个例子。
答案 2 :(得分:0)
UIButton是一个类集群。你真的不应该是子类,因为它代表的类是私有的。