networkActivityIndicatorVisible - PullRequest
       0

networkActivityIndicatorVisible

4 голосов
/ 13 июня 2010

Правильно ли использовать этот код с networkActivityIndicatorVisible?

- (void)viewWillAppear:(BOOL)animated {

    [super viewWillAppear:animated];

    UIApplication* app2 = [UIApplication sharedApplication]; 
    app2.networkActivityIndicatorVisible = YES; 
    [self loadSources];  // Loads data in table view
    app2.networkActivityIndicatorVisible = NO; 
}

Teo

Ответы [ 5 ]

17 голосов
/ 08 августа 2011

Поскольку NetworkActivityIndicatorVisible можно установить из нескольких точек, когда соединение все еще активно, вам необходимо отслеживать количество вызовов, которые включают / отключают его.Следующая категория UIApplication делает то же самое, используя статическую переменную:

// file UIApplication+NetworkActivity.h
@interface UIApplication (NetworkActivity)
- (void)showNetworkActivityIndicator;
- (void)hideNetworkActivityIndicator;
@end

// file UIApplication+NetworkActivity.m
#import "UIApplication+NetworkActivity.h"
static NSInteger activityCount = 0;
@implementation UIApplication (NetworkActivity)
- (void)showNetworkActivityIndicator {
    if ([[UIApplication sharedApplication] isStatusBarHidden]) return;
    @synchronized ([UIApplication sharedApplication]) {
        if (activityCount == 0) {
            [self setNetworkActivityIndicatorVisible:YES];
        }
        activityCount++;
    }
}
- (void)hideNetworkActivityIndicator {
    if ([[UIApplication sharedApplication] isStatusBarHidden]) return;
    @synchronized ([UIApplication sharedApplication]) {
        activityCount--;
        if (activityCount <= 0) {
            [self setNetworkActivityIndicatorVisible:NO];
            activityCount=0;
        }    
    }
}
@end

Теперь импортируйте UIApplication+NetworkActivity.h в свой код клиента и вызовите

// on connection started:
[[UIApplication sharedApplication] showNetworkActivityIndicator];

// on connection finished:
[[UIApplication sharedApplication] hideNetworkActivityIndicator];

Если вас беспокоит то, что индикатормигает только секунду, вам не нужен фоновый процесс.Просто вызовите [self performSelector:@selector(loadSources) withObject:Nil afterDelay:0.1], чтобы поток пользовательского интерфейса успел запустить анимацию индикатора сети, прежде чем заблокировать основной поток.

5 голосов
/ 23 сентября 2014

Если вы не используете AFNetworking (https://github.com/AFNetworking/AFNetworking), вы уже можете проверить их реализацию индикатора сетевой активности в AFNetworkingActivityIndicatorManager.

Если вы решите использовать эту библиотеку для доступа к сети, ониобрабатывать индикатор сетевой активности автоматически.Все, что вам нужно сделать, это сделать один вызов в AppDelegate, чтобы настроить его, а остальная часть работы за вас.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES];
}
3 голосов
/ 18 ноября 2011

Более короткое решение для отслеживания нескольких действий - снова с использованием категории UIApplication и статической переменной:

@interface UIApplication (NetworkActivityIndicator)
    - (void)toggleNetworkActivityIndicatorVisible:(BOOL)visible;
@end

@implementation UIApplication (NetworkActivityIndicator)
-(void)toggleNetworkActivityIndicatorVisible:(BOOL)visible {
    static int activityCount = 0;
    @synchronized (self) {
        visible ? activityCount++ : activityCount--;
        self.networkActivityIndicatorVisible = activityCount > 0;
    }
}
@end
1 голос
/ 15 июня 2010

Я наконец решил это. Я использовал performSelectorInBackground для выполнения загрузки данных в tableView

-(void)beginLoadSources {
    [self loadSources];  // Loads data in table view
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self performSelectorInBackground:@selector(beginLoadSources) withObject:nil];
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 
}
0 голосов
/ 23 июня 2015

Используйте тонкий код в вашем ExempleUIWebView.m до - (void) viewDidLoad

  • (void) webViewDidFinishLoad: (UIWebView *) webView {[UIApplication sharedApplication] .networkActivityIndicatorVisible = NO;[ПрогрессХУД отклонить];} и используйте это после - (void) viewDidLoad

[UIApplication sharedApplication] .networkActivityIndicatorVisible = YES;[ProgressHUD show: @ «Загрузка политики конфиденциальности» Взаимодействие: НЕТ];

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...