2011-09-01 22 views
7

在我的應用程序阻塞的用戶交互,我有一個覆蓋圖,當某些處理和網絡正在發生時顯示。它只是一個半透明的視圖(UIView的子類),其上有一個加載指示器,填滿了整個屏幕。與下面的觀點

我想阻止任何底層視圖接收用戶交互(例如,不應該滾動基礎表視圖,不按下按鈕)。

我可以在疊加視圖中做到這一點的最佳方式是什麼?

+0

您的疊加視圖位於視圖堆棧的頂部嗎? – Nekto

回答

10

只需將覆蓋視圖的userInteractionEnabled屬性設置爲YES即可。這將導致所有觸摸事件發生在覆蓋視圖上,而不會傳遞給底層視圖。

+0

你是第一=) – Nekto

+4

不工作對我來說,我已經試過在初始化以及在設定的loadView它,在這兩種情況下,仍低於按鈕確實收到觸摸事件。 – Ahti

+0

@Ahti:你是否在使用Interface Builder? (我不認爲你是這樣,但只是確認。) –

4

只需將您的半透明覆蓋視圖的屬性userInteractionEnabled設置爲YES即可。

1

只要確保覆蓋視圖及其所有父視圖沒有userInteractionEnabled設置爲NO,不會隱藏,並且沒有alpha小於0.01。然後,用戶的觸摸將與疊加層交互,而不是其後面的可見視圖。另外請注意,它不會阻止未被其超級視圖覆蓋的區域中的交互:即使您的視圖覆蓋了整個屏幕,但如果其父級僅爲10x10,那麼它只會阻止其父級覆蓋的10x10區域內的交互。

您可能還需要確保在任何現有的第一響應者上調用resignFirstResponder,否則用戶仍然可以通過鍵盤與其交互。

2

我認爲最好的方法是使用這2種方法:

[[UIApplication sharedApplication] beginIgnoringInteractionEvents]; 

[[UIApplication sharedApplication] endIgnoringInteractionEvents]; 

權做沉重的處理操作,前後分別完成這些之後。

+0

這是唯一對我有用的答案。無論您的疊加層位於視圖層次結構中的哪個位置,它都可以工作。我的覆蓋是在一個滾動視圖,這是我可以防止滾動而不更改滾動視圖的控制器的唯一方法(因爲覆蓋由幾個控制器使用) – Cogwheel

+0

@Cogwheel我很高興它解決了你的問題! – ppalancica