我的目标是有一个视图,符合以下描述:顶部栏顶部(如工具栏,但不完全),它跨越视图的整个宽度,下面的第二个“内容视图”。这个复合视图由我的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的多个子视图所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)