2 つのサブビューを持つスーパー ビューがあります。これらのサブビューは重複しています。
メニューからビューを選択するたびに、対応するビューが正面図になり、アクションを処理する必要があります。つまり、最前面のサブビューにする必要があります。
acceptsFirstResponder
すべての仕事をうまく辞任します。ただし、マウスダウンイベントは、設定された最上位のサブビューに送信されます。
よろしく、ダーナ
これを達成するための、もう少し明確で簡潔な別の方法を次に示します。
[viewToBeMadeForemost removeFromSuperview];
[self addSubview:viewToBeMadeForemost positioned:NSWindowAbove relativeTo:nil];
このメソッドのドキュメントによると、ビューを使用すると、すべての兄弟のrelativeTo:nil
上 (または下) にビューが追加されます。NSWindowBelow
もう 1 つの方法は、NSView のsortSubviewsUsingFunction:context:メソッドを使用して、兄弟ビューのコレクションを好みに合わせて並べ替えることです。たとえば、比較関数を次のように定義します。
static NSComparisonResult myCustomViewAboveSiblingViewsComparator( NSView * view1, NSView * view2, void * context )
{
if ([view1 isKindOfClass:[MyCustomView class]])
return NSOrderedDescending;
else if ([view2 isKindOfClass:[MyCustomView class]])
return NSOrderedAscending;
return NSOrderedSame;
}
次に、カスタム ビューをすべての兄弟ビューの上に残したい場合は、次のメッセージをカスタム ビューのスーパービューに送信します。
[[myCustomView superview] sortSubviewsUsingFunction:myCustomViewAboveSiblingViewsComparator context:NULL];
または、このコードをスーパービュー自体に移動し、メッセージsortSubviewsUsingFunction:context:を代わりにselfに送信することもできます。
removeFromSuperView を呼び出さずにこれを機能させることができました
// pop to top
[self addSubview:viewToBeMadeForemost positioned:NSWindowAbove relativeTo:nil];
以下のコードは正常に動作するはずです..
NSMutableArray *subvies = [NSMutableArray arrayWithArray:[self subviews]];//Get all subviews..
[viewToBeMadeForemost retain]; //Retain the view to be made top view..
[subvies removeObject:viewToBeMadeForemost];//remove it from array
[subvies addObject:viewToBeMadeForemost];//add as last item
[self setSubviews:subvies];//set the new array..
あなたはこれを試すかもしれません:
[viewToBeMadeFirst.window makeKeyAndOrderFront:nil];