Objective c 如何在Cocoa桌面应用程序中实际创建和加载多个视图?
我一直在尝试创建多个自定义视图来生成XIB并将控制器连接到它们。 我试过类似的方法Objective c 如何在Cocoa桌面应用程序中实际创建和加载多个视图?,objective-c,cocoa,Objective C,Cocoa,我一直在尝试创建多个自定义视图来生成XIB并将控制器连接到它们。 我试过类似的方法 [window AddSubView:view0] [窗口添加子视图:视图0] 及 [窗口设置内容视图:视图0] 但我仍然无法显示新视图 自从创建了xib文件以来,我认为我做错了 从创建xib文件和控制器到显示自定义视图的正确方法是什么 感谢您的帮助。Aaron Hillegass-MacOS X的可可编程(第三版),第29章。视图交换Aaron Hillegass-MacOS X的Cocoa编程(第三版),第2
[window AddSubView:view0]
[窗口添加子视图:视图0]
及
[窗口设置内容视图:视图0]
但我仍然无法显示新视图
自从创建了xib文件以来,我认为我做错了
从创建xib文件和控制器到显示自定义视图的正确方法是什么
感谢您的帮助。Aaron Hillegass-MacOS X的可可编程(第三版),第29章。视图交换Aaron Hillegass-MacOS X的Cocoa编程(第三版),第29章。视图交换
窗口不是Cocoa中的视图,并且没有任何响应AddSubView:
。(请记住,选择器区分大小写。)
这是有效的,但您需要确保view0
的框架与窗口的内容矩形大小相同
但我仍然无法显示新视图
一种可能是你实际上并不是在和窗户说话。您可能尚未连接窗口
插座,或者尚未加载带有该窗口的nib,或者,如果窗口
不是插座且该窗口不存在于nib中,则尚未在代码中创建它。无论哪种方式,您的窗口
变量都是nil
,因此您正在向nil
发送消息,例如addSubview:
,而这不起任何作用
如果您已经用NSLog
或调试器证明了您确实有一个窗口可以向其发送消息,但仍然存在问题,请确保您正在订购该窗口。如果窗口位于nib中,您可能希望启用“启动时可见”(实际上意味着“nib加载时可见”);否则,通过发送MakeKeyandDerfront:
消息,自行订购窗口
窗口不是Cocoa中的视图,并且没有任何响应AddSubView:
。(请记住,选择器区分大小写。)
这是有效的,但您需要确保view0
的框架与窗口的内容矩形大小相同
但我仍然无法显示新视图
一种可能是你实际上并不是在和窗户说话。您可能尚未连接窗口
插座,或者尚未加载带有该窗口的nib,或者,如果窗口
不是插座且该窗口不存在于nib中,则尚未在代码中创建它。无论哪种方式,您的窗口
变量都是nil
,因此您正在向nil
发送消息,例如addSubview:
,而这不起任何作用
如果您已经用NSLog
或调试器证明了您确实有一个窗口可以向其发送消息,但仍然存在问题,请确保您正在订购该窗口。如果窗口位于nib中,您可能希望启用“启动时可见”(实际上意味着“nib加载时可见”);否则,通过发送一条makekey和derfront:
消息,在您自己的窗口中订购。我们将在稍后。。。努力研究我让事情按照我想要的方式进行
这是我的密码
- (IBAction)showFirstView:(id)sender{
theDetailViewController = [DetailViewController new];
[theDetailViewController initWithNibName:@"DetailView" bundle:nil];
NSView *splitRightView = [[theSplitView subviews] objectAtIndex:1];
NSView *aDetailView = [theDetailViewController view];
[aDetailView setFrame:[splitRightView bounds]];
[aDetailView setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)];
[splitRightView addSubview:aDetailView];
NSLog(@"%@",(NSString *)splitRightView);
}
我做错的是将类创建为NSView而不是NSViewController
尝试像那样加载视图,但需要创建一个NSViewController并将其设置为自定义视图XIB的文件所有者类,然后将outlet视图设置为指向自定义视图
谢谢你的帮助。我们会找一些。。。努力研究我让事情按照我想要的方式进行
这是我的密码
- (IBAction)showFirstView:(id)sender{
theDetailViewController = [DetailViewController new];
[theDetailViewController initWithNibName:@"DetailView" bundle:nil];
NSView *splitRightView = [[theSplitView subviews] objectAtIndex:1];
NSView *aDetailView = [theDetailViewController view];
[aDetailView setFrame:[splitRightView bounds]];
[aDetailView setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)];
[splitRightView addSubview:aDetailView];
NSLog(@"%@",(NSString *)splitRightView);
}
我做错的是将类创建为NSView而不是NSViewController
尝试像那样加载视图,但需要创建一个NSViewController并将其设置为自定义视图XIB的文件所有者类,然后将outlet视图设置为指向自定义视图
感谢您的帮助。验证view0是否在Interface Builder中正确连接,或者如果它是手动创建的,请向我们显示创建它的代码。验证view0是否在Interface Builder中正确连接,或者如果它是手动创建的,请向我们显示创建它的代码。
[window setContentView:view0]
- (IBAction)showFirstView:(id)sender{
theDetailViewController = [DetailViewController new];
[theDetailViewController initWithNibName:@"DetailView" bundle:nil];
NSView *splitRightView = [[theSplitView subviews] objectAtIndex:1];
NSView *aDetailView = [theDetailViewController view];
[aDetailView setFrame:[splitRightView bounds]];
[aDetailView setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)];
[splitRightView addSubview:aDetailView];
NSLog(@"%@",(NSString *)splitRightView);
}