в 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