2013-02-08 64 views
0

我创建了一个继承自UIButton的类。如果我向我的XIB添加四舍五入的按钮并将它们的类属性设置为UIButton,它们将显示为圆角矩形按钮(但不会调用我的自定义代码,因此按钮的行为与普通按钮相似,这不是我想)。如果我在IB中将这些按钮的类属性设置为我的自定义类UIButtonCustom,它们在IB设计器中似乎仍然是圆角矩形按钮,但是当我运行该应用程序时,这些按钮是自定义类型的(这意味着它们在按钮文本,因为我没有设置任何按钮的背景图像)。如何从Interface Builder中的圆角矩形UIButton继承?

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

+0

根据我的经验,不,IB不能解释您的设计决策(尤其是那些内置的代码)并在运行之前渲染它们。 – 2013-02-08 16:26:55

+0

您不能在Interface Builder中使用您的子类。您必须以编程方式将它们添加到视图中 – Luke 2013-02-08 17:07:45

+0

@Luke:您可以在IB中使用UIButton子类 - 我一直都在使用它。当我自定义按钮(这是99%的时间)时,这工作正常,但如果我想要一个子类型的圆角矩形按钮,显然不起作用。 – MusiGenesis 2013-02-08 17:20:55

回答

1

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

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样式更改为“自定义”,否则您会发现按钮框架的行为不符合您的期望。