0

私は4つのビューを持っており、4つのボタンでこれらのビューを制御しています。どのビューが一番上にあるかを確認する方法が少し混乱しています。すでに試しましisFirstResponderたが、機能しません。誰かが知っているなら、それについて私を助けてください。前もって感謝します。

4

3 に答える 3

7

subViewsから最上位のビューを取得するには、親ビューからlastObjectを取得します

UIView * topMost = [[self.view subviews] lastObject];
于 2012-06-28T13:22:37.120 に答える
1

同じ領域に表示されるビューの設定をしようとしたとき、最初は私を助けてくれました。以前は、ビューごとに異なる背景色を使用して、どちらが上にあるかを確認していました。これがあなたが行おうとしているセットアップであるかどうかはわかりませんが、他にできることは、含まれているビューをフラッシュして、必要な現在のビューのみを「のみ」持つようにすることです。

于 2012-06-28T13:30:03.787 に答える
0

このような

UIWindow *window = [[UIApplication sharedApplication].keyWindow;
[window findTopMostViewForPoint:CGPointMake(100, 100)];

関数

@implementation UIView (Extra)

- (UIView *)findTopMostViewForPoint:(CGPoint)point
{
    for(int i = self.subviews.count - 1; i >= 0; i--)
    {
        UIView *subview = [self.subviews objectAtIndex:i];
        if(!subview.hidden && CGRectContainsPoint(subview.frame, point))
        {
            CGPoint pointConverted = [self convertPoint:point toView:subview];
            return [subview findTopMostViewForPoint:pointConverted];
        }
    }

    return self;
}

- (BOOL)isTopmostViewInWindow
{
    if(self.window == nil)
    {
        return NO;
    }

    CGPoint centerPointInSelf = CGPointMake(CGRectGetMidX(self.bounds), CGRectGetMidY(self.bounds));
    CGPoint centerPointOfSelfInWindow = [self convertPoint:centerPointInSelf toView:self.window];
    UIView *view = [self.window findTopMostViewForPoint:centerPointOfSelfInWindow];
    BOOL isTopMost = view == self || [view isDescendantOfView:self];
    return isTopMost;
}

@end
于 2013-02-06T18:09:59.923 に答える