iOS:活动指示器停止后如何执行一段代码?

时间:2014-09-05 18:46:49

标签: ios objective-c

我需要一种方法来执行类似下面的功能,但不是等待3秒,而是等待隐藏活动指示器[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;。任何提示或建议都表示赞赏。

double delayInSeconds = 3.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds *    NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
   // lines of code
 });

2 个答案:

答案 0 :(得分:2)

你如何使用Key-Value Observing

声明上下文

static int NetworkActivityContext;

添加观察者

[[UIApplication sharedApplication] addObserver:self forKeyPath:@"networkActivityIndicatorVisible" options:NSKeyValueObservingOptionNew context:&NetworkActivityContext];

实施KVO回调

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    if (context == &NetworkActivityContext) {
        BOOL isNetworkActivityVisible = [UIApplication sharedApplication].networkActivityIndicatorVisible;
        if(!isNetworkActivityVisible){
          //Do whatever work you need to do now that it's hidden
        }
    }
}

答案 1 :(得分:0)

不要依赖活动指标来确定应用程序的流程。在您设置[UIApplication sharedApplication].networkActivityIndicatorVisible = NO的位置,您还应该发送通知或以其他方式向更广泛的受众表明活动已结束。然后听取该通知并做你需要在别处做的事情。

如果您在同一个班级中设置networkActivityIndicatorVisible,或者您正在执行网络呼叫并且可以在完成块或委托回调中放置您需要的内容,那么您应该这样做。