0

メインウィンドウのコンテンツビューを次のように設定しています。

 newContentView = [[CutoutView alloc]initWithFrame:window.frame];
     [window setContentView:newContentView];
     [newContentView release];

ここで、CutoutViewは私のサブクラスの名前です。次に、サブビューを追加したいので、次のようにしました。

filterView = [[FilterView alloc]initWithFrame:NSMakeRect(100, 100, 500, 500)]; 
    [newContentView addSubview:filterView];
    [filterView release];

filterViewサブクラスからメソッドを呼び出したい場合を除いて、すべて正常に機能します。このように取得したいのですが、機能しません。

FilterView *filter = [[NSApp delegate] contentView]; 

私はドキュメントを読んで、contentViewを使用すると、「ウィンドウ階層内で最もアクセスしやすいNSViewオブジェクトを返す」だけであると読んだので、addSubviewに以下を追加してみました。

[newContentView addSubview:filterView positioned:NSWindowAbove relativeTo:nil];

しかし、それは私が何をする必要があるかについてのアイデアもうまくいきませんでしたか?ありがとう!

4

2 に答える 2

2

コンテンツビューは実際にはCutoutViewクラスであるため、次を使用する必要があります。

FilterView *filterView = [[[[[NSApp delegate] window] contentView] subviews] objectAtIndex:0];

しかし、2つのよりクリーンな方法は次のとおりです。

1)IBOutletsを使用してビューを追跡し、IBを介してそれらを割り当てます。2)タグを使用する:

filterView.tag = 101;

次に使用します:

FilterView* filterView = [[[NSApp delegate] contentView] viewWithTag:101];
于 2012-04-17T19:48:22.443 に答える
0

ContentViewは、アプリデリゲートではなくウィンドウのメソッドであるため、アプリデリゲートにIBOutletが「ウィンドウ」であるウィンドウがある場合は、次を使用する必要があります。FilterView * filter=[[[NSAppデリゲート]window]contentView];

于 2012-04-17T19:30:41.453 に答える