当ios设备中没有网络时,禁用UIButton的用户交互

时间:2015-03-03 06:20:51

标签: ios objective-c ipad afnetworking reachability

在我的应用程序中我想实现一个功能,我在我的应用程序中有一个按钮,我想当网络从iOS设备丢失然后这个按钮应该自动变为禁用,当再次使网络正常可用时,按钮应该成为启用。

每次设备网络连接丢失或可用时,都应自动完成此操作。

我没有得到任何方式或任何类型的线索来实现此功能,如果有人知道如何在iOS应用程序中实现此功能,那么请帮助我。

提前感谢。

3 个答案:

答案 0 :(得分:4)

我相信您正在使用 Reachability 类进行网络状态检测。因此,您可以使用此代码段注册网络状态更改检测

  

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityHasChanged :) name:kReachabilityChangedNotification object:nil];

现在,您可以为可达性对象

调用 startNotifier
  

[self.internetReachability startNotifier];

并且在方法 reachabilityHasChanged 内,您可以捕获所有3种状态的状态更改,即 ReachableViaWiFi ReachableViaWWAN NotReachable 。现在,从无法访问的情况下,您可以禁用按钮,如:

  

myButton.enabled = NO;

从可达状态开始,您可以再次启用它。

答案 1 :(得分:1)

您可以使用NSTimer,并且在该计时器中,您可以在每2秒后调用Reachability类的BOOL函数,并使其重复YES,返回true为假

NSTimer* internetTimer;
 internetTimer=[NSTimer scheduledTimerWithTimeInterval:2.0f target:self selector:@selector(checkInternet) userInfo:nil repeats:YES];

-(void)checkInternet{
    if([self isInternetAvailable])
     {
           //enable button
     }
     else
    {
          //disable button
    }

}

-(BOOL)isInternetAvailable()
{
    Reachability *networkReachability = [Reachability reachabilityForInternetConnection];
    NetworkStatus networkStatus = [networkReachability currentReachabilityStatus];
    return !(networkStatus == NotReachable);

}

您可以在这里找到Reachability类.h和.m。只需在项目中添加这两个文件即可。 https://github.com/tonymillion/Reachability

如果您处于ARC模式,可能还需要为.m

设置fno标志。

您还可以在某处添加可访问性观察者(即在viewDidLoad中):

Reachability *reachabilityInfo;
[[NSNotificationCenter defaultCenter] addObserver:self
                                     selector:@selector(myReachabilityDidChangedMethod)
                                         name:kReachabilityChangedNotification
                                       object:reachabilityInfo];

答案 2 :(得分:1)

您必须在https://developer.apple.com/library/ios/samplecode/Reachability/Introduction/Intro.html

上阅读Apple的文档和来源

在Reachability / APLViewController.m中,您将找到所有答案,例如如何观察网络更改通知以及如何更新按钮状态(启用/禁用),甚至可以更新用户界面