Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa NSViewController和Nib中的多个子视图_Cocoa_Interface Builder_Nib_Nsviewcontroller - Fatal编程技术网

Cocoa NSViewController和Nib中的多个子视图

Cocoa NSViewController和Nib中的多个子视图,cocoa,interface-builder,nib,nsviewcontroller,Cocoa,Interface Builder,Nib,Nsviewcontroller,我很难用Interface Builder和NSViewController加载视图 我的目标是创建一个符合以下描述的视图:顶部的顶部栏(类似于工具栏,但不完全相同)跨越视图的整个宽度,下面是第二个“内容视图”。此复合视图归myNSViewController子类所有 为此,使用Interface Builder是有意义的。我已经创建了一个视图nib,并在其中添加了两个子视图,将它们正确地布局(带有顶栏和内容视图)。我已将文件的所有者设置为MyViewController,并连接了插座等 我希望

我很难用Interface Builder和NSViewController加载视图

我的目标是创建一个符合以下描述的视图:顶部的顶部栏(类似于工具栏,但不完全相同)跨越视图的整个宽度,下面是第二个“内容视图”。此复合视图归my
NSViewController
子类所有

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

我希望加载的视图(条形图和内容)也在它们自己的NIB中(这可能是让我感到困惑的原因),并且这些NIB将它们的自定义类设置为相应的NSView子类(如果适用)。我不确定将什么设置为他们的
文件的所有者
(我猜
MyController
应该是他们的所有者)

唉,当我初始化
MyViewController
的一个实例时,我的NIB实际上都没有显示。我已经正确地将它添加到了我的窗口的contentView中(我已经进行了其他检查),实际上,它是一种负载。也就是说,
awakeFromNib
被发送到条形图,但它不会显示在窗口中。我想我肯定在什么地方遇到了麻烦。也许有人能帮我减轻一些挫折感

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

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

MyController *controller = [[MyController alloc] initWithNibName:@"MyController" bundle:nil];
[window setContentView:[controller view]];

然后在我的initWithNibName中,我现在除了给super打电话之外什么都不做

将每个视图分解为自己的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

MainViewController不应该是NSWindowController的子类吗?以及类中连接到MainMenu.xib主窗口中查看元素的插座?
让我们希望旧线程仍然被读取…

发布您的代码。不清楚你是如何初始化你的视图控制器的。工作起来很有魅力。谢谢你的例子和透彻的解释!谢谢,这很有帮助++没有必要。在我看来,将窗口控制器与管理整个窗口的内容视图的视图控制器分开是一种很好的做法。窗口的部件和功能比视图(具有相应的视图控制器)多得多。