0

Rechabilityを2つの方法で監視しようとしています。ホストへの接続とインターネットへの接続。どちらの場合も、UIAlertViewを表示しようとしています。これは現時点では正常に機能します。

私が達成しようとしているのは、ユーザーがアラートビューボタンをクリックして到達可能性を再度確認する場合ですが、これを行う方法がわかりません。理想的には、alertviewを閉じて再度表示したくないが、表示されたままにして、到達可能性チェックを再度要求するだけです。これは可能ですか?

これは私の現在のappdelegateimpコードであり、いつでも接続を確認したいのでappdelegateで使用されます。

- (void)monitorReachability {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:ReachabilityChangedNotification object:nil];

    self.hostReach = [Reachability reachabilityWithHostName: @"api.parse.com"];
    [self.hostReach startNotifier];

    self.internetReach = [Reachability reachabilityForInternetConnection];
    [self.internetReach startNotifier];

}

//Called by Reachability whenever status changes.
- (void)reachabilityChanged:(NSNotification* )note {
    NetworkStatus internetStatus = [self.internetReach currentReachabilityStatus];

    switch (internetStatus) {
        case NotReachable:
        {
            isReachable=NO;
            break;
        }
        case ReachableViaWiFi:
        {
            NSLog(@"The internet is working via WIFI.");
            isReachable=YES;
            break;
        }
        case ReachableViaWWAN:
        {
            NSLog(@"The internet is working via WWAN.");
            isReachable=YES;
            break;
        }
    }

    NetworkStatus hostStatus = [self.hostReach currentReachabilityStatus];

    switch (hostStatus) {
        case ReachableViaWWAN:
        {
            hostActive=YES;
            break;
        }
        case ReachableViaWiFi:
        {
            hostActive=YES;
            break;
        }
        case NotReachable:
        {
            hostActive=NO;
            break;
        }

    }


    if (hostActive == YES && isReachable == YES) {
        connectionNotReachable.hidden = YES;
    }

    if (isReachable == NO) {
        NSLog(@"Internet connection lost");\
        connectionNotReachable = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"connectionNotReachableTitle", @"Title for alert view - connection Not Reachable") message:NSLocalizedString(@"connectionNotReachableMessage", @"Message for alert view - connection Not Reachable") delegate:self cancelButtonTitle:nil otherButtonTitles:NSLocalizedString(@"connectionNotReachableTryAgain", @"Try again button for alert view - connection Not Reachable"), nil];

        [connectionNotReachable show];
        return;
    }

    if (hostActive == NO) {
        NSLog(@"Host not active, internet connection");
        UIAlertView *hostNotReachable = [[UIAlertView alloc] initWithTitle:@"Host Not Reachable" message:@"No Host" delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
        [hostNotReachable show];
        return;
    }
}
4

2 に答える 2

1

基本的に、あなたができることは、ネットワークに再びアクセスできるようになるまでUIAlertViewボタンを無効にすることです。

[alert addButtonWithTitle:@"OK"];
UIButton *submitButton = [[alert subviews] lastObject];
[submitButton setEnabled: … ];

そして、接続が戻った後、同じことをもう一度行います:)

于 2013-03-14T09:34:02.160 に答える
0

このようなメソッドを実装できるカスタムAlertViewを作成できます

  -(void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated {
       if (![self connected])
          return;
       [super dismissWithClickedButtonIndex:buttonIndex animated:animated];
    }

アラートが発生しているときに、この方法で接続を自分で確認できます

- (BOOL)connected 
{
    Reachability *reachability = [Reachability reachabilityForInternetConnection];  
    NetworkStatus networkStatus = [reachability currentReachabilityStatus]; 
    return !(networkStatus == NotReachable);
}

最後に見if([self connected])て、ボタンを閉じます

于 2013-03-14T09:39:05.553 に答える