スワップ可能なビューがある場所のプレースホルダーの NSView アウトレットと、現在使用中のビュー コントローラーへの参照を保持するためのプロパティを定義します。
@property (assign) IBOutlet NSView* mainView;
@property (strong) NSViewController* currentViewController;
ビューのスワッピングには一般的な方法を使用します (autolayout を使用してビューをプレースホルダー ビュー全体に表示します)。
-(void)setMainViewTo:(NSViewController *)controller
{
//Remove existing subviews
while ([[self.mainView subviews] count] > 0)
{
[self.mainView.subviews[0] removeFromSuperview];
}
NSView * view = [controller view];
[view setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.mainView addSubview:view];
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(view);
[self.mainView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[view]|"
options:0
metrics:nil
views:viewsDictionary]];
[self.mainView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[view]|"
options:0
metrics:nil
views:viewsDictionary]];
self.currentViewController = controller;
}
IBOutlets を定義して、View Controller をインスタンス化し、交換できるようになりました。
-(IBAction)showView1:(id)sender
{
View1Controller * controller = [[View1Controller alloc]init];
[self setMainViewTo:controller];
}
-(IBAction)showView2:(id)sender
{
View2Controller * controller = [[View2Controller alloc]init];
[self setMainViewTo:controller];
}