[ios]AlertView 自己解雇 (不想这) Xcode

发布时间: 2017/3/27 20:31:49
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我要检查该设备是否连接到互联网。如果不是,警报都要跳出来,用户需要按重试再试一次。 在我的代码中,第一次弹出警报视图,我按再试一次',然后第二次警报弹出,它后将解雇一个第二。 但这是假设我按重试时,才可以解雇。

这里是我的代码︰

在.h:

#import <UIKit/UIKit.h>

@class Reachability;

@interface ViewController : UIViewController{
    Reachability* internetReachable;
    Reachability* hostReachable;

    UIAlertView *networkAlert;
}

-(void) checkNetworkStatus;

@end

在.m:

#import "ViewController.h"
#import "Reachability.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    networkAlert = [[UIAlertView alloc]initWithTitle: @"Unstable Network Connection"
                                         message: @"Unstable network connection."
                                        delegate: self
                               cancelButtonTitle: nil
                               otherButtonTitles: @"Try Again", nil];

    [self checkNetworkStatus];

 }

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


 -(void) checkNetworkStatus
{
    NetworkStatus internetStatus = [internetReachable currentReachabilityStatus];
    switch (internetStatus)
    {
        case NotReachable:
         {
            NSLog(@"The internet is down.");
            [networkAlert show];
            break;
         }
        case ReachableViaWiFi:
        {
            NSLog(@"The internet is working via WIFI.");        
            break;
        }
        case ReachableViaWWAN:
        {
            NSLog(@"The internet is working via WWAN.");

            break;
        }
    }
}

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex == 0)
    {
        NSLog(@"user pressed Button Indexed 0");
        // Any action can be performed here
        [self checkNetworkStatus];

    }
}

@end

对不起,我的英语和这么多提前谢谢!!!

解决方法 1:

我能够复制你看到的这个问题,它已与你本质上告诉 alertView 显示时仍然在屏幕上和在过程中被解雇的事实。在 alertView 要被解雇,用的时间会有很小的延迟和当他们击中再试一次按钮你被解雇和呈现相同的警报视图。

为此修补程序是删除你有警报视图变量,真的没有必要坚持它在这种情况下。使用简单的方法来呈现的信息,并调用它时,你想要因为它是一个单独的警报实例每次,你不必担心显示/隐藏它在同一时间。

- (void)showInternetConnectionMessage {
    [[[UIAlertView alloc]initWithTitle: @"Unstable Network Connection" message: @"Unstable network connection." delegate: self cancelButtonTitle: nil otherButtonTitles: @"Try Again", nil] show];
}
赞助商