IOS 判斷當前UIViewController 是否正在顯示


我通常的做法是根據視圖控制器的生命周期來判斷,其是否是正在使用的狀態. 

舉例 設一個實例布爾變量isVisible  在 -ViewWillAppear 里面 isVisible = YES ;  在-ViewWillDisappear 里面 isVisible = NO;   然后根據條件需要實施方法

最近同事分享一個巧妙方法如下:http://edsioon.me/if-uiviewcontroller-is-display/

 
         

判斷UIViewController是否正在顯示

 
          
         
 
         

某些情況下,需判斷當前ViewController是否正在顯示,比如后台網絡請求報錯,我們可能只希望在發起請求的頁面彈窗提示用戶,當用戶已經跳轉到其他界面,不做彈窗,減少對用戶的干擾。

假如一個UIView對象當前正在顯示,那么它的window屬性肯定為非空值。雖然官方文檔未說明UIView未顯示時window屬性的取值,但是經過簡單的測試,大部分情況下UIView未顯示時,window的值為空,因此依據此判斷當前UIViewController是否正在顯示。但是訪問UIViewController的view屬性時,可能會引起view加載(假如此時還未加載),這是不必要的,而且還可能引起無法預期的問題。因此在訪問view屬性之前,最好先檢查isViewLoaded屬性來避免上述問題。

示例代碼如下,在UIViewController的擴展中聲明了一個isVisible方法,方便以后調用

UIViewController是否正在顯示

 

注意:UIView的官方文檔中僅注明當view還未添加到window時,window屬性為空;但是並未提及當window為nil時,當前view未顯示。通過簡單的Demo檢測上文的方法可滿足大部分需求,因此使用時建議進行簡單測試!

瞬間覺得自己好low 哈哈 ,但是要注意 該方法實用的條件哦!!!  不是特殊情況處理下的視圖控制器,一般都能用.

我寫了一個類方法 為了調用更方便哈哈

如下:

+(BOOL)isCurrentViewControllerVisible:(UIViewController *)viewController
{
    return (viewController.isViewLoaded && viewController.view.window);
}

我想區分一下 根據視圖的生命周來判斷 和 這個高大上的方法來比較 哪個比較實在呢?明天給答案


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM