如何从Interface Builder中的圆角rect UIButton继承?

时间:2013-02-08 16:25:14

标签: ios uibutton

我创建了一个继承自UIButton的类。如果我向我的XIB添加圆形矩形按钮并将其类属性设置为UIButton,它们将显示为圆角矩形按钮(但是我的自定义代码都没有被调用,因此按钮的行为就像普通按钮一样不是我想要的。如果我将IB中的这些按钮的类属性设置为我的自定义类UIButtonCustom,它们在IB设计器中看起来仍然是圆角矩形按钮,但是当我运行应用程序时,按钮属于自定义类型(意味着它们出现按钮文本大多是空白的,因为我没有为按钮设置任何背景图像。

当应用程序实际运行时,有没有办法让这些按钮看起来像圆形的矩形按钮?

2 个答案:

答案 0 :(得分:1)

您在xib上看到的圆角按钮是UIButton的子类,即UIRoundedRectButton 我不认为你可以将它子类化,因为它没有记录(私有API)。

答案 1 :(得分:1)

正如其他人已经注意到的那样,你不能继承UIRoundedRectButton。但是,通过在init方法中设置一些CALayer属性,可以使按钮看起来像圆角矩形按钮。

#import "MyCustomButton.h"
#import <QuartzCore/QuartzCore.h>

@implementation MyCustomButton


- (id)initWithFrame:(CGRect)frame
    //button created in code
{
    self = [super initWithFrame:frame];
    if (self) {
        [self initialise];
    }
    return self;
}

- (id)initWithCoder:(NSCoder *)aDecoder;
    //button created in Interface Builder
{
    self = [super initWithCoder:aDecoder];
    if (self) {
            [self initialise];
    }
    return self;
}

- (void)initialise;
{
    self.layer.cornerRadius  = 10.0f;
    self.layer.borderWidth = 1.0f;
    self.layer.borderColor = [[UIColor  lightGrayColor] CGColor];
}

@end

如果禁用了自动布局,您可以继续在IB中使用“圆角矩形”按钮样式,以便在布局中为您提供正确的外观,尽管在加载自定义按钮时将忽略该样式。如果启用了自动布局,则必须将IB样式更改为“自定义”,否则您会发现按钮框的行为与预期不符。