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。