私のアプリケーションウィンドウには2つのNSViewがあります。左側にはNSView( "メニュー")にいくつかのボタンがあります。ボタンの1つをクリックすると、右側のNSView( "コンテンツ")の内容が変更されます。NSViewにサブビューを追加すると表示されますが、削除することはできません
右側の各ビューについて、ロードされたNSViewControllerが別々にあり、ビューがサブビューとして追加されます。さらにボタンが左に押されると、右側の追加されたサブビューは削除され、新しいビューはサブビューとしてロードされます。これを実現するために
私は、次のとAppDelegateの私のメニューをロード:
MenuVC *menuSubView = [[MenuVC alloc] initWithNibName:@"MenuVC" bundle: nil];
menuSubView.contentView = (NSView*)[self contentView];
[[self menuView] addSubview:[menuSubView view]];
これが正常に動作します。あなたが見ることができるように、私はNSViewのポインタをメニューVCに置いて、サブビューを設定できるようにcontentViewを指しています。
Now]ボタンを押すのいずれかの方法として、私は、次の手順を実行します。
SomeContentVC *subView = [[SomeContentVC alloc] initWithNibName:@"SomeContentVC" bundle:nil];
[self.contentView addSubview:[subView view]];
これは動作しません。
ただし、MenuViewController実装のawakeFromNibメソッドからサブビューを追加した場合(デフォルトのコンテンツの場合は、アプリケーションを開くと表示されます)、機能します。しかし、そのサブビューを削除しようとすると、
[[self.contentView setSubviews:[NSArray array]];
私はできません。面白いのは、(たとえawakeFromNibメソッドに1つ追加した後でも)サブビューの数を数えようとすると、self.contentViewに0個のサブビューが返されるということです。どうして?どうすればそれを正しく動作させることができますか?メッセージングself.contentViewは0を返し、いくつかのもののため、除いて何も達成していないことを
おかげ
self.contentViewとは私の知る限り、あなた自身で作成していない限り、NSViewControllerにはこのようなプロパティはありません。 – Vervious
AppDelegateでは、これは正しいNSView(私のアプリケーションのコンテンツ部分)を指すNSViewポインタです。 MenuVCには、作成時にAppDelegateから読み込まれたNSViewポインタもあります.AppDelegateのポインタを渡して、メインアプリケーションウィンドウに正しいNSViewを読み込むことができます。たぶんこれはhttps://lh5.googleusercontent.com/-rsaZ6LZLeqM/T4PCBu-z43I/AAAAAAAAAAo/wS9__tdNxmo/s798/Screen%2520Shot%25202012-04-10%2520at%252007.13.39.png – Joseph