比方说,我有一个XIB文件(MyView.xib)包含一个单一的根UIView的类是一些自定义的UIView子类(MyView)。实例化自己作为文件所有者的XIB文件中的UIView?
我想从XIB文件中创建MyView的实例(代码中),但我也希望文件的所有者是MyView本身的实例(以便我可以将IBOutlets从XIB链接到代码)。
换句话说,MyView是XIB中根视图的类,它也被设置为文件的所有者类。
我想是这样的MyView的里面执行:
- (id)initFromNib {
self = [[[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil] firstObject];
return self;
}
然后我意识到是没有意义的,因为在这一点上self
是零,因此该文件的所有者设置为无(没有好)。
这开始感觉像鸡蛋问题,因为我需要文件的所有者是在创建之前即将创建的实例。
我又试图这样的事情:
- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:CGRectMake(0.0, 0.0, 310, 166)];
if (self) {
self = [[[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil] firstObject];
}
return self;
}
显然,这是一个临时的黑客只是为了看看它是否会工作,但没有去。该视图被加载并正确显示,但是当我按下其中一个按钮(其具有关联的IBAction)时,该应用程序崩溃。
我失去了一些东西明显?或者我的理解有某种缺陷?
一般问题是,我只想拥有一个包含该视图的可视化表示的关联XIB的自定义UIView子类,并且我还希望能够在XIB和其相应的UIView子类之间关联IBOutlets。
欢迎任何和所有建议。
当我将IB中的Xib的文件所有者设置为CustomClass时,这不起作用。相反,人们应该将视图设置为xib中的自定义类,我相信就是这样。 – stackOverFlew
请参阅http://stackoverflow.com/a/33711143/1392515 – stackOverFlew
你知道在这种情况下MyView类是否能够接收UI事件?那么如果我的观点有一个IBAction,它会被恰当地调用?从我的理解事件发送到文件的所有者。 –