39

2 つのサブビューを持つスーパー ビューがあります。これらのサブビューは重複しています。

メニューからビューを選択するたびに、対応するビューが正面図になり、アクションを処理する必要があります。つまり、最前面のサブビューにする必要があります。

acceptsFirstResponderすべての仕事をうまく辞任します。ただし、マウスダウンイベントは、設定された最上位のサブビューに送信されます。

よろしく、ダーナ

4

7 に答える 7

41

これを達成するための、もう少し明確で簡潔な別の方法を次に示します。

[viewToBeMadeForemost removeFromSuperview];
[self addSubview:viewToBeMadeForemost positioned:NSWindowAbove relativeTo:nil];

このメソッドのドキュメントによると、ビューを使用すると、すべての兄弟のrelativeTo:nil上 (または下) にビューが追加されます。NSWindowBelow

于 2010-05-22T01:53:40.613 に答える
17

もう 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に送信することもできます。

于 2011-12-21T13:09:21.613 に答える
3

removeFromSuperView を呼び出さずにこれを機能させることができました

// pop to top
[self addSubview:viewToBeMadeForemost positioned:NSWindowAbove relativeTo:nil];
于 2012-09-18T14:49:08.347 に答える
0

以下のコードは正常に動作するはずです..

    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..
于 2010-05-20T13:23:19.193 に答える
-11

あなたはこれを試すかもしれません:

[viewToBeMadeFirst.window makeKeyAndOrderFront:nil];
于 2012-01-26T06:00:39.360 に答える