在iOS
,以編程方式,如何能找到什麼最頂部UIView
是?如何引用「最頂級」視圖?
換句話說..現在顯示什麼視圖?
說,我有一個筆尖堆疊在一起的3個意見。在程序內部,如果我知道它是什麼,我可以刪除頂部視圖。我怎樣才能找出在筆尖上的視圖?
在iOS
,以編程方式,如何能找到什麼最頂部UIView
是?如何引用「最頂級」視圖?
換句話說..現在顯示什麼視圖?
說,我有一個筆尖堆疊在一起的3個意見。在程序內部,如果我知道它是什麼,我可以刪除頂部視圖。我怎樣才能找出在筆尖上的視圖?
您可以擁有很多最頂層的視圖,因爲視圖不必佔用所有屏幕。
如果你想有一個觀點的最頂部子視圖,您可以撥打
[yourView subviews];
,並採取TJE最後一個(他們是在顯示順序,最前最後一)
[[yourView subviews] objectAtIndex:[[yourView subviews] count]];
編輯:這是(從評論)
[[yourView subviews] lastObject];
更好,如果你知道你的viewController顯示僅僅通過更換yourView rController.view
像這樣
UIView *topMost = [[self.view subviews] lastObject];
或者這樣
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
不要忘了測試是否隱藏。而α!= 0並且該視圖在屏幕上。你的例子中的 –
,我如何知道'yourView'是什麼? – JAM
正如我在我的最後一句中所說的,如果yourMainViewController是處理顯示視圖的控制器(例如,如果您未添加任何modalViewController或未在控制器中推入任何控制器,則爲rootViewController),則yourView可以是yourMainViewController.view。 。 更一般地說,這是您所知道的第一個您目前正在顯示的視圖。 如果你想要一個更精確的答案,你需要解釋你的應用程序是什麼,它顯示什麼,我可能會告訴你你必須使用哪種視圖。 – MatLecu