iOS:用xib自定义视图

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

我有一个自定义的视图子类。 我创build了一个xib文件来devise它的布局。 我连接了四个button作为课程的出路。

#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

当我尝试loginbtn1,看它是否存在,它打印空。 我假设它是因为我没有初始化它,但是我不确定如何做到这一点,考虑到如果我将它创build为一个新的button,那么xib中的所有东西将是无用的?

编辑回复:

等等,你正在尝试初始化你的class级内的视图? 不要这样做。

在Interface Builder中,将MCQview.xib的类设置为MCQView以自动创build连接。 连接所有的button,如果你还没有。

之后,您可以根据需要自动编辑属性。

在这里输入图像说明

原始回应

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

 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]; 

这应该很简单:

 view = [[[NSBundle mainBundle] loadNibNamed:@"MCQView" owner:self options:nil] objectAtIndex:0] 

对于Swift(2):

  var nib = NSBundle.mainBundle().loadNibNamed("MCQView", owner: self, options: nil) view : MCQView = nib[0] as! MCQView self.view.addSubview(view) 

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