2011-11-04 50 views
5

W programie , programowo, jak można znaleźć to, co jest najbardziej przydatne?Jak odwołać się do widoku "najwyżej"?

Innymi słowy .. jaki widok jest teraz wyświetlany?

Powiedzmy, mam stalówkę z 3 widokami ułożonymi jeden na drugim. Wewnątrz programu mogę usunąć widok z góry, jeśli wiem, co to jest. Jak mogę się dowiedzieć, jaki widok jest na szczycie stalówki?

Odpowiedz

9

Możesz mieć wiele najwyższych wyświetleń, ponieważ widok nie musi zajmować całego ekranu.

Jeśli chcesz się na najwyższym podrzędny z widoku, można zadzwonić

[yourView subviews]; 

i wziąć TJE ostatni (są one w wyświetlanej kolejności, najbardziej przedni ostatni)

[[yourView subviews] objectAtIndex:[[yourView subviews] count]]; 

edit: to jest lepsze (z komentarzy)

[[yourView subviews] lastObject]; 

Jeśli wiesz, że Twój viewOperator po prostu zastąpi Twój widok przez ciebie rController.view

+0

Nie zapomnij przetestować isHidden. I .alfa = 0. I widok jest na ekranie. –

+0

w twoim przykładzie, skąd mam wiedzieć, czym jest 'yourView'? – JAM

+0

Jak już powiedziałem w swoim ostatnim zdaniu, twoja wizja może być twoimMainViewController.view, jeśli twójMainViewController jest kontrolerem, który obsługuje wyświetlane widoki (na przykład twój rootViewController, jeśli nie dodałeś żadnego modalViewController lub nie wepchnąłeś żadnego kontrolera do kontrolera nawigacyjnego) . Ogólnie rzecz biorąc, jest to pierwszy wyświetlany widok, który obecnie jest wyświetlany. Jeśli chcesz uzyskać bardziej precyzyjną odpowiedź, musisz wyjaśnić, czym jest Twoja aplikacja i co wyświetla, i być może będę w stanie powiedzieć, jakiego widoku musisz użyć. – MatLecu

2

Ci się to

UIView *topMost = [[self.view subviews] lastObject]; 
3

Albo jak tego

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

Funkcje

@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 
Powiązane problemy