2015-09-24 59 views
1

我遇到UIAlertView問題。從App Delegate檢查屏幕上的UIAlertViews

在我的AppDelegate中,我檢查應用程序的可達性: 如果無法訪問,我調用Utils類的警報。

- (void)reachabilityChanged:(NSNotification *)note 
{ 
    Reachability* currentReachabilityObject = [note object]; 
    NSParameterAssert([currentReachabilityObject isKindOfClass:[Reachability class]]); 
    NetworkStatus status = [currentReachabilityObject currentReachabilityStatus]; 

    if (status == NotReachable) 
    { 
     [Utils showAlert:@"NotReachableNetwork") title:@"Error")]; 
    } 
} 

如果我打開/關閉Wi-Fi無線兩三次,我得到三個警報。 但我只想顯示一個。

請告訴我如何檢查在AppDelegate屏幕上是否有任何警報。

+1

http://stackoverflow.com/questions/21179922/can-i-check-if-any-uialertview-displaying-right-now –

+0

TY。我會查一下。 –

+1

爲什麼不在實例上存儲一個布爾值,如果您已經顯示了該警報,則檢查是否再次顯示該警報?這將比嘗試確定是否顯示'UIAlertView'還要前途得多,請記住'UIAlertView'已被棄用並被'UIAlertController'取代。 –

回答

3

爲什麼不保留對警報的引用?

這樣你只需要檢查警報是否爲零,如果它是零,你可以創建一個新的警報。如果不是零,這意味着你已經有一個顯示,並且不需要顯示另一個。易如反掌。

+0

那麼,這是一個很好的解決方案。你能告訴我一個優雅的實現嗎?我怎樣才能存儲這個參考? –

+0

你可以使用一個強大的屬性,例如,你可以在你的頭文件中聲明:@property(strong,nonatomic)UIAlertView * activeAlert;'當創建alertView時,你會做'_activeAlert = alertYouJustCreated'。當解除警報時,您可以將_activeAlert設置爲零。這樣你就可以檢查是否已經有一個簡單的'if(_activeAlert)'提示節目 –

0

請嘗試下面的代碼,我認爲它會爲你工作。

#pragma mark - Internet Reachability Handlers - 
- (void) updateInterfaceWithReachability: (Reachability*) curReach 
{ 
    NetworkStatus netStatus = [curReach currentReachabilityStatus]; 

    if (_changeReachability) 
    { 
     if(netStatus==NotReachable) 
     { 
      [Utils showAlert:@"NotReachableNetwork") title:@"Error")]; 
      _isNetAvailable = NO; 
      _changeReachability = NO; 
     } 
     else 
     { 
      _isNetAvailable = YES; 
      _changeReachability = NO; 
     } 
    } 
} 

//Called by Reachability whenever status changes. 
- (void) reachabilityChanged: (NSNotification*)note 
{ 
    _changeReachability = YES; 
    Reachability* curReach = [note object]; 
    NSParameterAssert([curReach isKindOfClass: [Reachability class]]); 
    [self updateInterfaceWithReachability: curReach]; 
} 

-(void)checkallTypesofInternet 
{ 
    // For 3G Connection 
    hostReach = [Reachability reachabilityWithHostName:@"www.apple.com"]; 
    [hostReach startNotifier]; 
    [self updateInterfaceWithReachability: hostReach]; 

    // For Individual Net Connection 
    internetReach = [Reachability reachabilityForInternetConnection]; 
    [internetReach startNotifier]; 
    [self updateInterfaceWithReachability: internetReach]; 

    // For WiFi 
    wifiReach = [Reachability reachabilityForLocalWiFi]; 
    [wifiReach startNotifier]; 
    [self updateInterfaceWithReachability: wifiReach]; 
} 

讓我知道你是否仍然面臨任何問題。