在我的應用程序阻塞的用戶交互,我有一個覆蓋圖,當某些處理和網絡正在發生時顯示。它只是一個半透明的視圖(UIView的子類),其上有一個加載指示器,填滿了整個屏幕。與下面的觀點
我想阻止任何底層視圖接收用戶交互(例如,不應該滾動基礎表視圖,不按下按鈕)。
我可以在疊加視圖中做到這一點的最佳方式是什麼?
在我的應用程序阻塞的用戶交互,我有一個覆蓋圖,當某些處理和網絡正在發生時顯示。它只是一個半透明的視圖(UIView的子類),其上有一個加載指示器,填滿了整個屏幕。與下面的觀點
我想阻止任何底層視圖接收用戶交互(例如,不應該滾動基礎表視圖,不按下按鈕)。
我可以在疊加視圖中做到這一點的最佳方式是什麼?
只需將您的半透明覆蓋視圖的屬性userInteractionEnabled
設置爲YES即可。
只要確保覆蓋視圖及其所有父視圖沒有userInteractionEnabled
設置爲NO,不會隱藏,並且沒有alpha
小於0.01。然後,用戶的觸摸將與疊加層交互,而不是其後面的可見視圖。另外請注意,它不會阻止未被其超級視圖覆蓋的區域中的交互:即使您的視圖覆蓋了整個屏幕,但如果其父級僅爲10x10,那麼它只會阻止其父級覆蓋的10x10區域內的交互。
您可能還需要確保在任何現有的第一響應者上調用resignFirstResponder
,否則用戶仍然可以通過鍵盤與其交互。
我認爲最好的方法是使用這2種方法:
[[UIApplication sharedApplication] beginIgnoringInteractionEvents];
[[UIApplication sharedApplication] endIgnoringInteractionEvents];
權做沉重的處理操作,前後分別完成這些之後。
這是唯一對我有用的答案。無論您的疊加層位於視圖層次結構中的哪個位置,它都可以工作。我的覆蓋是在一個滾動視圖,這是我可以防止滾動而不更改滾動視圖的控制器的唯一方法(因爲覆蓋由幾個控制器使用) – Cogwheel
@Cogwheel我很高興它解決了你的問題! – ppalancica
您的疊加視圖位於視圖堆棧的頂部嗎? – Nekto