我正在编写一个 Cocoa 框架(不是应用程序),它包含自定义的定义NSView
;框架会被加载到其他应用程序中,自定义的NSView
会被拖到应用程序的GUI并被初始化
问题是我想在框架中包含一个 XIB 文件
我想向XIB(在框架中)添加一个按钮和一个标签,但是使用框架的应用程序中的视图不会显示按钮和标签
我已经将 XIB 的 File's Owner 设置为NSView
框架中的自定义
我还应该做什么?
我正在编写一个 Cocoa 框架(不是应用程序),它包含自定义的定义NSView
;框架会被加载到其他应用程序中,自定义的NSView
会被拖到应用程序的GUI并被初始化
问题是我想在框架中包含一个 XIB 文件
我想向XIB(在框架中)添加一个按钮和一个标签,但是使用框架的应用程序中的视图不会显示按钮和标签
我已经将 XIB 的 File's Owner 设置为NSView
框架中的自定义
我还应该做什么?
让视图加载 nib 并将按钮、标签等从 nib 中的视图移动到自身。
最简单的方法是通过获取subviews
nib 的视图并为所有人执行此操作。
如果您的笔尖使用自动布局,我认为您还需要引入笔尖视图拥有的任何约束,并且您可能还需要编辑或替换引用该视图的任何约束(例如,如果视图设置为距离笔尖视图边缘 X 点)。
您可能还需要做额外的工作来更改新视图的框架,或更改子视图的框架(无论是通过重定位、调整大小或两者兼而有之)以匹配为新视图提供的框架。
是的,我刚刚解决了这个问题,希望详细信息对其他人有所帮助。
在框架中,有一个复杂的 子类,其中包含很多控件,NSView
如NSSplitView
NSOutlineView
和等;该框架包含一个H文件、一个M文件和一个XIB文件;H 和 M 定义类;在 XIB 中,有一个 View 对象,其类为.IKImageBrowserView
NSPathControl
MyView
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 中取出,调整大小并将其添加到窗口的主视图中