UIButton子类 - 设置属性?

时间:2011-10-04 07:37:21

标签: objective-c ios xcode ios4 uibutton

我已经创建了一个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中链接了按钮,并设置了类类型...

谢谢,

奔奔

3 个答案:

答案 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是一个类集群。你真的不应该是子类,因为它代表的类是私有的。