我正在编写Cocoa Framework(不是Application),它包含自定义NSView
的定义;框架将加载到其他应用程序中,自定义的NSView
将被拖动到应用程序的GUI并初始化
问题是我想在Framework
中包含一个XIB文件我想在XIB中添加一个按钮和一个标签(在框架中),但是使用该框架的应用程序中的视图不会显示按钮和标签
我已经将XIB的文件所有者设置为框架中的自定义NSView
我还应该做些什么?
答案 0 :(得分:1)
让视图加载笔尖并将笔尖中的按钮,标签等移动到自身。
最简单的方法就是获取笔尖视图的subviews
并为所有这些视图执行此操作。
如果您的笔尖使用自动布局,我认为您还需要引入笔尖视图所拥有的任何约束,您可能还需要编辑或替换任何引用它的约束视图(例如,如果视图设置为距离笔尖视图的边缘X点)。
您可能还需要做额外的工作来更改新视图的框架,或者更改子视图的框架(无论是通过重定位,调整大小还是两者)以匹配为新视图指定的框架。
答案 1 :(得分:0)
是的,我刚刚解决了这个问题,我希望细节对其他人有所帮助。
在框架中,有一个复杂的NSView
子类,其中包含许多控件,例如NSSplitView
NSOutlineView
和IKImageBrowserView
,NSPathControl
等;框架包含H文件,M文件和XIB文件; H和M定义MyView
类;在XIB中,有一个View对象,其类为MyView
。
在应用程序方面,用户需要将NSView
项目拖到其应用程序的主窗口上,并为视图分配一个插座,例如mainView
,并在applicationDidFinishLaunching
中}“消费者”应用程序的功能,以下代码是必要的
NSBundle *frameworkBundle = [NSBundle bundleForClass:[MyView class]];
NSNib *nibby = [[[NSNib alloc] initWithNibNamed:@"MyView" bundle:frameworkBundle] autorelease];
NSArray *topLevelObjects = nil;
BOOL flag = [nibby instantiateNibWithOwner:nil topLevelObjects:&topLevelObjects];
assert(flag);
for (id topLevelObject in topLevelObjects) {
if ([topLevelObject isKindOfClass:[MyView class]]) {
[mainView addSubview: topLevelObject];
MyView* xView = topLevelObject;
[xView setFrameSize:mainView.frame.size];
break;
}
}
在上面的代码中,加载了XIB文件,因此初始化了MyView
对象,然后我们将其从XIB中取出,调整大小并将其添加到窗口的主视图中