1

我正在编写一个 Cocoa 框架(不是应用程序),它包含自定义的定义NSView;框架会被加载到其他应用程序中,自定义的NSView会被拖到应用程序的GUI并被初始化

问题是我想在框架中包含一个 XIB 文件

我想向XIB(在框架中)添加一个按钮和一个标签,但是使用框架的应用程序中的视图不会显示按钮和标签

我已经将 XIB 的 File's Owner 设置为NSView框架中的自定义

我还应该做什么?

4

2 回答 2

1

让视图加载 nib 并将按钮、标签等从 nib 中的视图移动到自身。

最简单的方法是通过获取subviewsnib 的视图并为所有人执行此操作。

如果您的笔尖使用自动布局,我认为您还需要引入笔尖视图拥有的任何约束,并且您可能还需要编辑或替换引用该视图的任何约束(例如,如果视图设置为距离笔尖视图边缘 X 点)。

您可能还需要做额外的工作来更改新视图的框架,或更改子视图的框架(无论是通过重定位、调整大小或两者兼而有之)以匹配为新视图提供的框架。

于 2013-06-11T15:39:35.187 回答
0

是的,我刚刚解决了这个问题,希望详细信息对其他人有所帮助。

在框架中,有一个复杂的 子类,其中包含很多控件,NSViewNSSplitView NSOutlineView和等;该框架包含一个H文件、一个M文件和一个XIB文件;H 和 M 定义类;在 XIB 中,有一个 View 对象,其类为.IKImageBrowserViewNSPathControlMyViewMyView

在应用程序端,用户需要将一个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 中取出,调整大小并将其添加到窗口的主视图中

于 2013-06-11T16:03:47.637 回答