我通常的做法是根據視圖控制器的生命周期來判斷,其是否是正在使用的狀態.
舉例 設一個實例布爾變量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方法,方便以后調用
注意:UIView的官方文檔中僅注明當view還未添加到window時,window屬性為空;但是並未提及當window為nil時,當前view未顯示。通過簡單的Demo檢測上文的方法可滿足大部分需求,因此使用時建議進行簡單測試!
瞬間覺得自己好low 哈哈 ,但是要注意 該方法實用的條件哦!!! 不是特殊情況處理下的視圖控制器,一般都能用.
我寫了一個類方法 為了調用更方便哈哈
如下:
+(BOOL)isCurrentViewControllerVisible:(UIViewController *)viewController { return (viewController.isViewLoaded && viewController.view.window); }
我想區分一下 根據視圖的生命周來判斷 和 這個高大上的方法來比較 哪個比較實在呢?明天給答案

