Zauważyłem, że niektóre aplikacje, takie jak Safari i poczta, wyświetlają wskaźnik ładowania na pasku stanu (pasek na samej górze telefonu), gdy uzyskują dostęp do sieci. Czy istnieje sposób, aby zrobić to samo w aplikacjach SDK, czy jest to tylko sprawa Apple?Jak wyświetlić wskaźnik ładowania na górnym pasku stanu?
Odpowiedz
Jest w UIApplication:
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
dla SWIFT:
UIApplication.shared.isNetworkActivityIndicatorVisible = true
Znalazłem następujące makra bardzo przydatne!
#define ShowNetworkActivityIndicator() [UIApplication sharedApplication].networkActivityIndicatorVisible = YES
#define HideNetworkActivityIndicator() [UIApplication sharedApplication].networkActivityIndicatorVisible = NO
więc można po prostu zadzwonić ShowNetworkActivityIndicator();
lub HideNetworkActivityIndicator();
z poziomu aplikacji (tak długo, jak nagłówek jest włączone oczywiście!).
Dlaczego nie zdefiniować kategorii na UIApplication? Wydaje się dużo ładniejszy (i bardziej debuggable) niż #define. –
Napisałem singleton, który rozwiązuje problem wielu połączeń poprzez utrzymywanie licznika, co się dzieje (aby uniknąć usunięcia stanu, gdy powróci połączenie, ale drugi jest nadal aktywny):
Plik nagłówka:
#import <Foundation/Foundation.h>
@interface RMActivityIndicator : NSObject
-(void)increaseActivity;
-(void)decreaseActivity;
-(void)noActivity;
+(RMActivityIndicator *)sharedManager;
@end
i realizacja
#import "RMActivityIndicator.h"
@interface RMActivityIndicator()
@property(nonatomic,assign) unsigned int activityCounter;
@end
@implementation RMActivityIndicator
- (id)init
{
self = [super init];
if (self) {
self.activityCounter = 0;
}
return self;
}
-(void)increaseActivity{
@synchronized(self) {
self.activityCounter++;
}
[self updateActivity];
}
-(void)decreaseActivity{
@synchronized(self) {
if (self.activityCounter>0) self.activityCounter--;
}
[self updateActivity];
}
-(void)noActivity{
self.activityCounter = 0;
[self updateActivity];
}
-(void)updateActivity{
UIApplication* app = [UIApplication sharedApplication];
app.networkActivityIndicatorVisible = (self.activityCounter>0);
}
#pragma mark -
#pragma mark Singleton instance
+(RMActivityIndicator *)sharedManager {
static dispatch_once_t pred;
static RMActivityIndicator *shared = nil;
dispatch_once(&pred, ^{
shared = [[RMActivityIndicator alloc] init];
});
return shared;
}
@end
przykład:
[[RMActivityIndicator sharedManager]increaseActivity];
[NSURLConnection sendAsynchronousRequest:urlRequest queue:self.networkReceiveProcessQueue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
{
[[RMActivityIndicator sharedManager]decreaseActivity];
}
Pojedyncza linia kodu, aby to zrobić:
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
Może to również być pomocne do upewnij się, że działa to na głównym wątku, ponieważ jest to związane z UI.
dispatch_async(dispatch_get_main_queue(), ^{
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
});
Musisz zadbać o ukrywanie wskaźnika aktywności również po zakończeniu połączenia sieciowego.
Jeśli używasz AFNetworking
, to nie musisz dużo robić.
zrobić następujące zmiany w AppDelegate
klasy:
importu
AFNetworking/AFNetworkActivityIndicatorManager.h
umieścić to w
didFinishLaunchingWithOptions:
[[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES]
Lub z restkitem będzie to #import [[AFRKNetworkActivityIndicatorManager sharedManager] setEnabled: YES]; – deepwinter
- 1. Pasek ładowania na pasku stanu?
- 2. Jak włączyć wskaźnik sieci na pasku stanu iOS?
- 3. Wyświetl tekst powiadomienia na pasku stanu - Android
- 4. UITableView Zakłócanie pasku stanu
- 5. Jak wyświetlić logo na pasku adresu?
- 6. Emacs: Jak wyświetlić bieżący katalog na pasku ramki?
- 7. Pasek stanu iOS: jak wyświetlić tekst w tym miejscu?
- 8. Wskaźnik ładowania kontrolki ReportViewer?
- 9. Jak wyświetlić ikonę na pasku stanu, gdy aplikacja jest uruchomiona, w tym w tle?
- 10. W kakao, używając widoku sieci, Jak wyświetlić łącze na pasku stanu po zakończeniu myszy?
- 11. Android Wyświetlaj powiadomienie na pasku stanu bez rozwijanego widoku
- 12. Ustawianie gradientu zarówno na pasku nawigacyjnym, jak i na pasku stanu
- 13. Jak usunąć ikonę baterii na pasku stanu Android?
- 14. Jak zastosować gradient na pasku stanu w systemie Android?
- 15. Wskaźnik ładowania z Google Chrome
- 16. Jak sprawdzić, czy ikona akcji paska zadań systemu Android znajduje się na górnym pasku lub na dolnym pasku (podzielona)?
- 17. Jak dodać wskaźnik ładowania do AutoCompleteTextView
- 18. Jak wyświetlić niestandardowy widok w pasku akcji?
- 19. Magento: Jak wyświetlić opis kategorii na lewym pasku bocznym?
- 20. Jak wyświetlić ikonę strony rozszerzenia rozszerzenia Chrome na pasku adresu?
- 21. Jak mogę wyświetlić moją usługę systemu Windows na pasku zadań?
- 22. Jak wyświetlić obraz na pasku narzędzi za pomocą Objective-C
- 23. Wykrywanie, czy użytkownik ma na pasku stanu połączenia
- 24. Elewacja appbarlayout systemu Android pojawia się na pasku stanu
- 25. SWT TrayItem.setImage nie skaluje się prawidłowo na pasku stanu Maca
- 26. iOS 8 - Zastosuj rozmycie na pasku nawigacji ORAZ pasek stanu
- 27. Handling powiadomienie na pasku stanu przed wyświetleniem go
- 28. Transmitowanie NSP, gdy popover znajduje się na pasku stanu
- 29. Przeczytaj tekst w pasku stanu aplikacji Excel
- 30. jak wyświetlić przycisk usuwania w prawym górnym rogu obrazu?
Dzięki który działa doskonale. Tylko jedna uwaga: symulator zdaje się ignorować tę wartość, która sprawiła, że początkowo nie działała. – rustyshelf
@ labelyshelf, wyświetla się w nowszych symulatorach. – MrHus
'[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible: YES];' // jako jedna liniówka –