Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 如何让自定义视图控制器将其视图加载到另一个nib的占位符中?_Cocoa_Xib_Nsview_Nib_Nsviewcontroller - Fatal编程技术网

Cocoa 如何让自定义视图控制器将其视图加载到另一个nib的占位符中?

Cocoa 如何让自定义视图控制器将其视图加载到另一个nib的占位符中?,cocoa,xib,nsview,nib,nsviewcontroller,Cocoa,Xib,Nsview,Nib,Nsviewcontroller,因此,使用xib/nib创建一个自定义的NSViewController子类。 然后在应用程序的主nib中,从对象库添加一个NSViewController对象,将该类设置为自定义视图控制器类。 在自定义视图控制器的应用程序委托中创建IBOutlet 将NSView对象添加到窗口。 在窗口中将视图控制器的视图设置为NSView 构建和运行时,视图是主nib中的通用视图,而不是视图控制器nib中的通用视图 我认为还需要什么才能让这个过程按我所认为的那样运作? 我认为这应该从自定义视图控制器的nib

因此,使用xib/nib创建一个自定义的
NSViewController
子类。 然后在应用程序的主nib中,从对象库添加一个
NSViewController
对象,将该类设置为自定义视图控制器类。 在自定义视图控制器的应用程序委托中创建
IBOutlet

NSView
对象添加到窗口。 在窗口中将视图控制器的视图设置为
NSView

构建和运行时,视图是主nib中的通用视图,而不是视图控制器nib中的通用视图

我认为还需要什么才能让这个过程按我所认为的那样运作? 我认为这应该从自定义视图控制器的nib填充视图(以及任何子视图)

我知道如何在代码中做到这一点,但它看起来确实像锅炉板。(特别是添加了自动布局约束。)


请告诉我我遗漏了一些非常明显的东西。

当您将
NSViewController
视图
出口连接到空的通用容器视图时,它将在运行时用空视图替换从NIB加载的实际视图

不幸的是,仅仅通过使用接口生成器和插座无法实现您的要求。最简单的替代方法:

NSViewController
对象添加到主XIB文件中,并在属性检查器中设置Nib名称Nib束,但不要将视图出口设置为空容器视图

向应用程序委托(或XIB中公开的其他控制器类)添加属性,以在视图控制器和容器视图中创建
IBOutlet
s。例如:

@property (nonatomic, strong) IBOutlet NSViewController *viewController; // view controller in XIB
@property (nonatomic, weak) IBOutlet NSView *containerView;
将XIB中的这些插座连接到视图控制器和容器视图。现在,在运行时,将视图控制器的视图添加为容器视图的子视图:

NSView *realView = self.viewController.view;
realView.frame = self.containerView.bounds;
// Also configure autoresizing behaviour for realView using either autoresizing masks 
// or layout constraints so that realView resizes with its parent container
[self.containerView addSubview:realView];

这就是我害怕的。但似乎一定有办法。如果基于视图的表视图和NSCollectionView可以做到这一点。我想我只是没有看到xib/nib中的视图控制器代理有多大用处,如果它只适合连接绑定和其他东西的话。我会再多坚持一些,但我担心你是对的。谢谢我相信这是对的。NSViewController是一个(相对)新的类,它没有UIViewController那么酷。在较新的API(如NSpover)中,您可以按照想象的方式使用它,但我认为,仅在窗口中设置视图,您就必须编写一些代码。希普利突然变得活跃起来,你的博客本身就很有分量(更不用说你的悠久历史了)。。。好吧,我会守住堡垒,直到我们得到一些额外的重物:)我真的希望有人知道一些魔法,除非10.10有魔法出现。。。我知道UIViewController和UIKit从一开始就有着惊人的成就。这在Yosmite(10.10)中仍然是真的(即无法将视图控制器连接到IB中的视图)吗?NSViewController显然已经有了巨大的更改。谢谢您的回答。这真的帮了我的忙,你的解释非常清楚,切中要害。非常感谢。