【发布时间】:2011-05-02 08:46:09
【问题描述】:
如何使用 Xib 正确加载作为 NSView 子类的对象?
我希望它不是从一开始就动态加载,所以我做了一个 MyView.Xib 从 MyDocument.m 我做了:
MyView *myView = [[MyView alloc] initWithFrame:...];
[NSBundle loadNibNamed:@"MyView" owner:myView];
[someview addSubview:myView];
...
并且背景很好(它调用drawrect:并且按预期绘制)
但是我放在xib上的所有按钮都不会出现。
我已经检查过了,它们已加载但它们的超级视图与 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,它们在 IB 中正确连接,这就是为什么它们加载得很好(我可以参考它们)。但是,顶视图没有 IBOutlet。因此,当 NSBundle 加载 nib 时,顶视图会分配给其他对象。我认为如果我将我在 IB 中的顶视图设置为来自 class:MyView 并将 myView 设置为 [NSBundle loadNibNamed:@"MyView" owner:myView]; 的所有者,就会发生这种情况,但似乎并非如此。
我做错了什么?
【问题讨论】:
-
尝试将它们移到前面,也许它会在后面绘制它并且由于背景而看不到
-
我刚试过...这没有发生 ;(
-
在您的 nib 文件中,是否有一个类为
MyView的顶级视图? nib 文件中是否还有其他顶级对象?文件所有者的类别是什么? -
在我的笔尖中:文件的所有者类是
MyView,其中的顶视图当前是类NSView,但我也尝试过MyView。都没有用
标签: objective-c cocoa macos