アプリケーションウィンドウには、2つのNSViewがあります。左側のNSView(「メニュー」)にはいくつかのボタンがあります。ボタンの1つをクリックすると、右側のNSViewのコンテンツ(「コンテンツ」)が変更されます。
右側のビューごとに、個別のNSViewControllerが読み込まれ、それらのビューがサブビューとして追加されます。左側でさらにボタンを押すと、右側に追加されたサブビューが削除され、新しいビューがサブビューとしてロードされます。
これを実現するために、次のようにAppDelegateにメニューをロードします。
MenuVC *menuSubView = [[MenuVC alloc] initWithNibName:@"MenuVC" bundle: nil];
menuSubView.contentView = (NSView*)[self contentView];
[[self menuView] addSubview:[menuSubView view]];
これは正常に機能します。ご覧のとおり、メニューVCにNSViewポインターがあり、これがcontentViewを指しているため、サブビューを入力できます。
ボタンを押す方法として、次のようにします。
SomeContentVC *subView = [[SomeContentVC alloc] initWithNibName:@"SomeContentVC" bundle:nil];
[self.contentView addSubview:[subView view]];
これは動作しません。
ただし、MenuViewController実装のawakeFromNibメソッドからサブビューを追加すると(アプリを開いたときのデフォルトコンテンツの場合)、機能します。ただし、を使用してそのサブビューを削除しようとすると
[[self.contentView setSubviews:[NSArray array]];
私はできません。興味深いのは、サブビューの数をカウントしようとすると(awakeFromNibメソッドでサブビューを追加した後でも)、self.contentViewに対して0個のサブビューが返されることです。なんで?どうすれば正しく動作させることができますか?
ありがとう