Ответ 1
При разбиении каждого представления на свой собственный наконечник и использовании NSViewController
типичным способом обработки вещей является создание подкласса NSViewController
для каждого из ваших перьев. Владелец файла для каждого соответствующего файла nib затем будет установлен в этот подкласс NSViewController
, и вы подключите выход view
к своему пользовательскому представлению в наконечнике. Затем в контроллере представления, который управляет представлением содержимого основного окна, вы создаете экземпляр каждого подкласса 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