/ / Как да препратите изгледа "най-отгоре"? - ios, uiview, йерархия

Как да отнесем изгледа "най-много"? - ios, uiview, йерархия

в iOS, програмно, как може да се намери нещо най-много UIView е?

С други думи ... какъв изглед се показва в момента?

Кажи, имам писалка с 3 изгледа нагоре. Вътре в програмата мога да премахна горния изглед, ако знам какво е то. Как мога да разбера какъв е изгледът на върха?

Отговори:

10 за отговор № 1

Можете да имате много от най-многобройните изгледи, защото изгледът не трябва да поеме целия екран.

Ако искате най-високата поредност на изгледа, можете да се обадите

[yourView subviews];

и да вземете последното (те са в изреден ред, най-после в последния ред)

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

редактиране: това е по-добре (от коментари)

[[yourView subviews] lastObject];

Ако знаете, че вашият показванController просто замества YourView от yourController.view


3 за отговор № 2

Като този

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

3 за отговор № 3

Или по този начин

UIWindow *window = [[UIApplication sharedApplication].keyWindow;
UIView *topMost = [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