3

我有一个窗口区域(在我的 MainMenu.xib 中),我想根据某些用户选择的标准在不同的时间点用不相关的“视图”(例如 NSTable、IKImageBrowserView 等)动态填充该区域。

  • 如何定义窗口的这个区域,以便可以用不同的视图“替换”它?
  • 如何将表格或其他视图附加到窗口的这个区域?

(在那里放置一个通用的 NSView 并每次添加一个子视图就足够了吗?我对 Cocoa 相当陌生,所以欢迎任何指针)

4

3 回答 3

6

在现代 Cocoa 中,这是视图控制器的工作。Cathy Shive有一些关于它们的好博客文章(123),并共同创作了一个比基本 NSViewController更有用的视图控制器类。

于 2009-07-01T09:37:59.140 回答
1

有几种方法可以做到这一点。我发现很容易放入“自定义 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
于 2009-07-01T09:00:15.177 回答
0

我个人会为 2 部分添加 2 个视图。说一个 topView 和一个 bottomView 使用界面生成器中的链接将它们链接到您的代码。从那里您可以管理每个视图的内容:

addSubview(是将接收uiview或对象的对象的函数)

您可以使用它来将单个对象或视图添加到您的两个主要视图中,例如:

[topView addSubview:roundedUIButton_instance];

或者

[topView addSubview:another_view_instance];

removeFromSuperview(是一个对象的函数,用于删除其自身)

[roundedUIButton_instance removeFromSuperview];

或者

[another_view_instance removeFromSuperview];
于 2009-07-01T09:22:05.413 回答