可可 – NSViewController和来自Nib的多个子视图

可可 – NSViewController和来自Nib的多个子视图,第1张

概述我有一个困难的时间包装我的头围绕加载视图与Interface Builder和NSViewController。 我的目标是有一个视图,符合以下描述:顶部栏顶部(如工具栏,但不完全),它跨越视图的整个宽度,下面的第二个“内容视图”。这个复合视图由我的NSViewController子类拥有。 为此,使用Interface Builder是有意义的。我已经创建了一个视图nib,并添加到它的两个子视图 我有一个困难的时间包装我的头围绕加载视图与Interface Builder和NSVIEwController。

我的目标是有一个视图,符合以下描述:顶部栏顶部(如工具栏,但不完全),它跨越视图的整个宽度,下面的第二个“内容视图”。这个复合视图由我的NSVIEwController子类拥有。

为此,使用Interface Builder是有意义的。我已经创建了一个视图nib,并添加到它的两个子视图,正确地布局(顶部栏和内容视图)。我已经设置文件的所有者是MyVIEwController和连接的插座等。

我希望加载的视图(栏和内容)也在自己的笔记本(这可能是什么让我失望)和那些笔记本的自定义类设置到相应的NSVIEw子类(如果适用)。我不知道什么设置为他们的文件的所有者(我猜MyController,因为它应该是他们的所有者)。

唉,当我初始化一个MyVIEwController的一个实例,我的笔记本没有一个实际上显示。我已经添加到我的窗口的contentVIEw正确(我已经检查否则),实际上,事情的负载。也就是说,awakeFromNib被发送到条形视图,但它不显示在窗口中。我想我肯定有一些电线在某个地方交叉。也许有人可以借一只手来缓解我的一些挫折感?

编辑一些代码来显示我在做什么

控制器在我的应用程序完成启动时加载,从应用程序委托:

MyController *controller = [[MyController alloc] initWithNibname:@"MyController" bundle:nil];[window setContentVIEw:[controller vIEw]];

然后在我的initWithNibname我不做任何事情,但现在调用超级。

解决方法 当将每个视图分解成自己的nib并使用NSVIEwController时,处理事情的典型方式是为每个nib创建一个NSVIEwController子类。然后,每个相应的nib文件的文件所有者将被设置为NSVIEwController子类,并且您将视图出口连接到nib中的自定义视图。然后,在控制主窗口内容视图的视图控制器中,实例化每个NSVIEwController子类的实例,然后将该控制器的视图添加到您的窗口。

一个快速的代码 – 在这段代码中,我调用主内容视图控制器MainVIEwController,“工具栏”的控制器是topVIEwController,其余的内容是ContentVIEwController

//MainVIEwController.h@interface MainVIEwController : NSVIEwController{    //These would just be custom vIEws included in the main nib file that serve    //as placeholders for where to insert the vIEws coming from other nibs    IBOutlet NSVIEw* topVIEw;    IBOutlet NSVIEw* contentVIEw;    topVIEwController* topVIEwController;    ContentVIEwController* contentVIEwController;}@end//MainVIEwController.m@implementation MainVIEwController//loadVIEw is declared in NSVIEwController,but awakeFromNib would work also//this is preferred to doing things in initWithNibname:bundle: because//vIEws are loaded lazily,so you don't need to go loading the other nibs//until your own nib has actually been loaded.- (voID)loadVIEw{    [super loadVIEw];    topVIEwController = [[topVIEwController alloc] initWithNibname:@"topVIEw" bundle:nil];    [[topVIEwController vIEw] setFrame:[topVIEw frame]];    [[self vIEw] replaceSubvIEw:topVIEw with:[topVIEwController vIEw]];    contentVIEwController = [[ContentVIEwController alloc] initWithNibname:@"ContentVIEw" bundle:nil];    [[contentVIEwController vIEw] setFrame:[contentVIEw frame]];    [[self vIEw] replaceSubvIEw:contentVIEw with:[contentVIEwController vIEw]];}@end
总结

以上是内存溢出为你收集整理的可可 – NSViewController和来自Nib的多个子视图全部内容,希望文章能够帮你解决可可 – NSViewController和来自Nib的多个子视图所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1042390.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存