如何使用Xib正确加载NSView的子类对象?
我希望它能够动态地加载,而不是从一开始就加载,所以我创建了一个名为MyView.Xib的文件。
在MyDocument.m中,我执行了以下操作:
MyView *myView = [[MyView alloc] initWithFrame:...];
[NSBundle loadNibNamed:@"MyView" owner:myView];
[someview addSubview:myView];
...
并且背景是正常的(它调用drawrect:并且按预期绘制),但是我放在xib上的所有按钮都不会出现。我已经检查过,它们已被加载,但它们的superview不是与myView
相同的对象。为什么会这样?我认为我在Xib中漏掉了一些东西,但我不知道确切的是什么。换句话说:如何确保我的xib中的根视图与文件所有者是相同的对象?
我希望Mac有类似于此的东西:
NSArray* nibViews = [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil]; //in iOS this will load the xib
MyView* myView = [ nibViews objectAtIndex:1];
[someview addSubview:myView];
...
提前致谢。
编辑
我想我已经意识到问题的根源了...(??)
在我的 MyView 类中,我有各种正确连接的 IBOutlet,这就是为什么它们能够很好地加载(我可以引用它们)。然而,对于顶部视图没有 IBOutlet。因此,当 NSBundle 加载 nib 时,顶部视图会被分配给其他对象。我认为如果我在 IB 中将我的顶部视图设置为 MyView
类,并将 myView
设置为 owner,如下所示:[NSBundle loadNibNamed:@"MyView" owner:myView];
但似乎情况并非如此。我做错了什么?
MyView
?nib文件中是否还有其他顶层对象?文件所有者的类是什么? - user557219MyView
,它的顶层视图当前的类是NSView
,但我也尝试过MyView
,但都没有成功。 - nacho4d