如何在Interface Builder中使用自定义UIButton?

gab*_*osz 5 xcode custom-controls interface-builder uibutton ios

我有一个子类UIButton加载一个Nib:

@implementation BlaButtonVC

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        NSArray *subViews = [[NSBundle mainBundle] loadNibNamed:@"BlaButton" owner:self options:nil];
        [self addSubview:subViews[0]];
    }
    return self;
}

@end
Run Code Online (Sandbox Code Playgroud)

我可以将此按钮添加到视图中,如下所示:

// ViewController.m

BlaButtonVC *button = [[BlaButtonVC alloc] initWithFrame:CGRectMake(10, 10, 280, 44)];

button.titleXLabel.text = @"Nyuff";
button.descLabel.text = @"Kukk";

[self.view addSubview:button];
Run Code Online (Sandbox Code Playgroud)

我的问题是我不知道如何从Interface Bulder这样做,如何使用这个UIButton子类而不是正常的子类.

已将Button Type更改为Custom,将Custom Class更改为BlaButtonVC,但这还不够.它将调用BlaButtonVC initWithFrame,但按钮不会出现在Interface Builder中,也不会出现在Simulator中.

我错过了什么?

在这里您可以找到完整的示例:https:
//www.dropbox.com/s/ioucpb6jn6nr0hs/blabla1.zip

Mar*_*1ni 6

从初始化时StoryBoard,它调用方法initWithCoder:而不是initWithFrame:.除此之外,一切都是正确的.

  • 是的,它调用`-initWithCoder:`,但你不应该覆盖它.相反,你应该覆盖`-awakeFromNib`,因为此时一切都已设置好.(甚至不要考虑自己打电话给这两个.) (2认同)
  • 覆盖`initWithCoder:`和`awakeFromNib`没有任何问题.这取决于他希望如何设置它. (2认同)