2011-11-04 30 views
5

Trong iOS, theo cách lập trình, cách người ta có thể tìm thấy những gì đầu nhấtUIView là?Cách tham chiếu chế độ xem "từ trên cùng"?

Nói cách khác .. chế độ xem nào được hiển thị ngay bây giờ?

Nói, tôi có một ngòi với 3 chế độ xem xếp chồng lên nhau. Bên trong một chương trình, tôi có thể loại bỏ các đầu xem nếu tôi biết nó là gì. Làm thế nào tôi có thể tìm hiểu xem những gì là trên đầu trang của ngòi?

Trả lời

9

Bạn có thể có nhiều lượt xem nhiều nhất vì chế độ xem không phải mất tất cả màn hình.

Nếu bạn muốn subview đỉnh nhất của một cái nhìn, bạn có thể gọi

[yourView subviews]; 

và chịu tje người cuối cùng (họ là để hiển thị, hầu hết các mặt trận cuối cùng)

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

chỉnh sửa: điều này tốt hơn (từ nhận xét)

[[yourView subviews] lastObject]; 

Nếu bạn biết chế độ hiển thị của bạnBạn chỉ cần thay thế chế độ xem của mình rController.view

+0

Đừng quên để kiểm tra Được ẩn. Và .alpha! = 0. Và chế độ xem là trên màn hình. –

+0

trong ví dụ của bạn, làm thế nào để tôi biết 'yourView' là gì? – JAM

+0

Như tôi đã nói trong câu cuối cùng, yourView có thể là yourMainViewController.view nếu yourMainViewController là bộ điều khiển xử lý các khung nhìn được hiển thị (ví dụ rootViewController của bạn nếu bạn không thêm bất kỳ modalViewController hoặc không đẩy bất kỳ bộ điều khiển nào trong bộ điều khiển điều hướng) . Nói chung, đây là chế độ xem đầu tiên bạn có mà bạn biết hiện đang được hiển thị. Nếu bạn muốn có câu trả lời chính xác hơn, bạn sẽ cần phải giải thích đơn đăng ký của bạn là gì và nội dung gì đang hiển thị và tôi có thể cho bạn biết bạn phải sử dụng chế độ xem nào. – MatLecu

2

Như thế này

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

Hoặc như thế này

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

Chức năng

@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 
Các vấn đề liên quan