2015-08-27 98 views
1

無論如何檢查視圖控制器的視圖,子視圖是否可見或不正確?如何檢查視圖而不是viewController是否可見?

我檢查了link 1link 2link 3。所有這些帖子討論了關於UIViewController的視圖,並根據視圖的窗口屬性編寫了條件。 但我想檢查視圖是否現在可見或被其他視圖覆蓋或隱藏,這是我無法處理以下情況。

if (viewController.isViewLoaded && viewController.view.window) { 
    // viewController is visible 
} 

有關我該怎麼做的任何幫助?謝謝。

+0

通常你(或你的代碼)應該知道是什麼做視圖層次結構和那裏是可見的或在前面。你能否解釋爲什麼你需要找出答案,以便我們能夠提出更好的方法? – vikingosegundo

+1

我的項目是一個完整的混亂,這是由以前的開發人員開始的購物車,現在在獨輪車的形狀,與法拉利風格的屋頂和發動機罩。所以不要問。情況是,視圖控制器上的自定義視圖上有一個imageView :)。我需要爲imageView調用'bringSubviewToFront:'方法,並且只有在沒有其他視圖位於該自定義視圖上時才調用另一個自定義方法。 – x4h1d

回答

3

一個UIView有一個superview屬性和window財產。你可以檢查看看是否是nil。如果視圖有一個無超視圖,那麼它沒有被添加到任何東西,並且不可見。

如果視圖確實有一個不是nil的superview屬性,那麼您可以查看superview的subviews數組屬性以確定視圖堆棧(0位於後面)。

如果您的視圖不在堆棧的前面,您需要查看其前面的其他視圖的框架矩形以確定它們是否覆蓋它。就個人而言,我會使用CGRectIntersection命令來測試。

一個UIView也有hidden屬性,它可以檢查以及一個alpha屬性,它將使視圖無形的,如果它被設置爲0

+0

在我的情況下,'CGRectIntersection'似乎是一個好主意。 – x4h1d

0

您可以使用此代碼獲取視圖的索引,並確定它是在前面還是不

UIView* view1 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 50, 50)]; 
NSLog(@"%d", [[self.view subviews] indexOfObject:view1]); // Is 1 
相關問題