我遗漏了一些重要的东西。不完全确定它是什么。
我有一个自定义视图子类。我创建了一个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中的所有东西都将是无用的?
答案 0 :(得分:13)
已编辑的回复:
哦等等,你是在尝试在课堂上初始化视图吗?不要那样做。
在Interface Builder中,将MCQview.xib的类设置为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];
答案 1 :(得分:4)
这应该很简单:
view = [[[NSBundle mainBundle] loadNibNamed:@"MCQView" owner:self options:nil] objectAtIndex:0]
答案 2 :(得分:1)
对于Swift(2):
var nib = NSBundle.mainBundle().loadNibNamed("MCQView", owner: self, options: nil)
view : MCQView = nib[0] as! MCQView
self.view.addSubview(view)
答案 3 :(得分:0)
你是对的,你不需要用XIB初始化按钮。尝试使用initWithNibName而不是loadNibNamed。