12

我错过了一些重要的东西。不完全确定它是什么。

我有一个自定义视图子类。我创建了一个 xib 文件来设计它的布局。我连接了四个按钮作为班级的插座。

#import <UIKit/UIKit.h>

@interface MCQView : UIView
@property (strong, nonatomic) IBOutlet UIButton *btn1;
@property (strong, nonatomic) IBOutlet UIButton *btn2;
@property (strong, nonatomic) IBOutlet UIButton *btn3;
@property (strong, nonatomic) IBOutlet UIButton *btn4;

然后我有

#import "MCQView.h"

@implementation MCQView
@synthesize btn1,btn2,btn3,btn4;

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        [self addSubview:[[[NSBundle mainBundle] loadNibNamed:@"MCQView" owner:self options:nil] objectAtIndex:0]];
            NSLog(@"%@", btn1);

    return self;
}

然后我通过以下方式将视图添加到另一个视图控制器initWithFrame

当我尝试记录 btn1 以查看它是否存在时,它会打印 null。我认为这是因为我还没有初始化它,但我不确定该怎么做,考虑到如果我将它创建为一个新按钮,那么 xib 中的所有东西都将毫无用处?

4

4 回答 4

13

编辑回复:

哦,等等,您正在尝试在您的班级中初始化视图?不要那样做。

在 Interface Builder 中,将 MCQview.xib 的 Class 设置为 MCQView 以自动创建连接。连接所有按钮(如果您还没有的话)。

之后,您将能够根据需要自动编辑属性。

在此处输入图像描述

原始回复

我是凭记忆做的,但我认为你应该这样做:

NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MCQView" owner:self options:nil];

UIView *view = [[UIView alloc] init]; // or if it exists, MCQView *view = [[MCQView alloc] init];

view = (UIView *)[nib objectAtIndex:0]; // or if it exists, (MCQView *)[nib objectAtIndex:0];

[self.view addSubview:view];
于 2013-09-21T00:21:50.813 回答
4

这应该很简单:

view = [[[NSBundle mainBundle] loadNibNamed:@"MCQView" owner:self options:nil] objectAtIndex:0]
于 2014-01-27T18:41:06.623 回答
1

对于斯威夫特 (2):

    var nib = NSBundle.mainBundle().loadNibNamed("MCQView", owner: self, options: nil)
    view : MCQView = nib[0] as! MCQView
    self.view.addSubview(view)
于 2015-09-17T04:34:55.870 回答
0

你是对的,你不需要用 XIB 初始化按钮。尝试使用 initWithNibName 而不是 loadNibNamed。

于 2013-09-21T00:19:17.420 回答