Ios 如何从Interface Builder中的圆形矩形UIButton继承?

Ios 如何从Interface Builder中的圆形矩形UIButton继承?,ios,uibutton,Ios,Uibutton,我创建了一个从UIButton继承的类。如果我将圆角矩形按钮添加到我的XIB中,并将其类属性设置为UIButton,它们将显示为圆角矩形按钮(但是我的自定义代码从未被调用,因此按钮的行为与普通按钮类似,这不是我想要的)。如果我在IB中将这些按钮的class属性设置为我的自定义classUIButtonCustom,它们在IB设计器中仍然显示为圆角矩形按钮,但当我运行应用程序时,按钮是自定义类型的(这意味着它们在按钮文本中大部分显示为空白,因为我没有为按钮设置任何背景图像) 有没有办法让这些按钮在

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


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

您在xib上看到的圆形按钮是
UIButton
的子类,即
UIRoundedRectButton


我不认为您可以对它进行子类化,因为它没有文档记录(一个私有API)。

正如其他人所指出的,您不能对UIRoundedRectButton进行子类化。但是,通过在init方法中设置一些CALayer属性,可以使按钮看起来像圆形的rect按钮

#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
#导入“MyCustomButton.h”
#进口
@实现MyCustomButton
-(id)initWithFrame:(CGRect)帧
//在代码中创建的按钮
{
self=[super initWithFrame:frame];
如果(自我){
[自我初始化];
}
回归自我;
}
-(id)initWithCoder:(NSCoder*)aDecoder;
//在界面生成器中创建的按钮
{
self=[super initWithCoder:aDecoder];
如果(自我){
[自我初始化];
}
回归自我;
}
-(无效)草签;
{
self.layer.cornerRadius=10.0f;
self.layer.borderWidth=1.0f;
self.layer.borderColor=[[UIColor lightGrayColor]CGColor];
}
@结束

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

根据我的经验,不,IB无法解释您的设计决策(尤其是内置代码)并在运行之前呈现它们。不能在界面生成器中使用子类。您必须将它们添加到视图中programmatically@Luke:您可以在IB中使用UIButton子类-我一直都这样做。不管怎样,当我在做自定义按钮时(99%的时候),这很好用,但是如果我想要一个子类的圆角矩形按钮,这显然不起作用。