我有一个窗口区域(在我的 MainMenu.xib 中),我想根据某些用户选择的标准在不同的时间点用不相关的“视图”(例如 NSTable、IKImageBrowserView 等)动态填充该区域。
- 如何定义窗口的这个区域,以便可以用不同的视图“替换”它?
- 如何将表格或其他视图附加到窗口的这个区域?
(在那里放置一个通用的 NSView 并每次添加一个子视图就足够了吗?我对 Cocoa 相当陌生,所以欢迎任何指针)
我有一个窗口区域(在我的 MainMenu.xib 中),我想根据某些用户选择的标准在不同的时间点用不相关的“视图”(例如 NSTable、IKImageBrowserView 等)动态填充该区域。
(在那里放置一个通用的 NSView 并每次添加一个子视图就足够了吗?我对 Cocoa 相当陌生,所以欢迎任何指针)
在现代 Cocoa 中,这是视图控制器的工作。Cathy Shive有一些关于它们的好博客文章(1、2、3),并共同创作了一个比基本 NSViewController更有用的视图控制器类。
有几种方法可以做到这一点。我发现很容易放入“自定义 nsview”,并将其替换为 windowDidLoad 中的真实视图。它看起来像这样:
@interface MyController : NSWindowController
{
IBOutlet NSView* dummyView;
}
@end
@implementation MyController
-(void)windowDidLoad{
NSView* actualView = ...; //create the real view here
[actualView setFrame:[dummyView frame]];
[actualView setAutoresizingMask:[dummyView autoresizingMask]];
NSView* superview = [dummyView superview];
[dummyView removeFromSuperview];
[superview addSubview:actualView];
dummyView = actualView; //just incase dummyView is ever used again
}
@end
我个人会为 2 部分添加 2 个视图。说一个 topView 和一个 bottomView 使用界面生成器中的链接将它们链接到您的代码。从那里您可以管理每个视图的内容:
addSubview(是将接收uiview或对象的对象的函数)
您可以使用它来将单个对象或视图添加到您的两个主要视图中,例如:
[topView addSubview:roundedUIButton_instance];
或者
[topView addSubview:another_view_instance];
removeFromSuperview(是一个对象的函数,用于删除其自身)
[roundedUIButton_instance removeFromSuperview];
或者
[another_view_instance removeFromSuperview];