Jak dodać kółko obrotowe UIActivityIndicatorView do przycisku UIBarButton, aby po kliknięciu jednego z przycisków na pasku nawigacji zobaczył spinner podczas ładowania?Dodaj UIActivityIndicatorView do UIBarButton
Odpowiedz
Jeśli próbujesz pokazać koło działalność na przycisk paska nawigacji (np możesz mieć przycisk odświeżania na swoim pasku nawigacyjnym) - można utworzyć nowy UIBarButtonItem
z widokiem zwyczaj będąc UIActivityIndicatorView
:
Cel C
uiBusy = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
uiBusy.hidesWhenStopped = YES;
[uiBusy startAnimating];
[self.navigationItem.rightBarButtonItem initWithCustomView:uiBusy];
Swift
let uiBusy = UIActivityIndicatorView(activityIndicatorStyle: .White)
uiBusy.hidesWhenStopped = true
uiBusy.startAnimating()
self.navigationItem.rightBarButtonItem = UIBarButtonItem(customView: uiBusy)
Powoduje to nadpisanie numeru rightBarButtonItem
za pomocą obracającego się koła. Kiedy skończysz, po prostu odtwórz numer rightBarButtonItem
.
UIActivityIndicatorView to rodzaj widoku. Ustaw jego ramkę w swoim przycisku i użyj -addSubview, aby dodać ją do hierarchii widoku przycisku UIBarButton.
mam upraszczając, ponieważ trzeba starać się dopasować go do miejsca (ewentualnie poprzez skalowanie) i wyśrodkować go ...
pseudokod, ja nie zamierzam sprawdzić w Xcode, ale coś tak powinno działać:
UIActivityIndicatorView *act = [[UIActivityIndicatorView alloc] init];
act.frame = CGMakeRect(3,3,25,25);
[myBarButton addSubview:act];
[act release];
'UIBarButtonItem' nie jest podklasą' UIView' i nie ma 'addSubview:'. Powinieneś zrobić coś takiego jak 'UIBarButtonItem * myBarButton = [[UIBarButtonItem alloc] initWithCustomView: act];' zamiast lub 'myBarButton.customView = act;'. –
Rzeczywiście wskaźnik aktywności nie jest dodawany jako element paska narzędzi. To jest podgląd bieżącego widoku.
UIActivityIndicatorView *act = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
[act setCenter:CGPointMake(20, 20)];
[act startAnimating];
[self.view addSubview:act];
Pamiętaj, aby wydać go w -(void)dealloc
.
Więcej informacji o używaniu wskaźnika aktywności znajduje się tutaj: http://stackoverflow.com/questions/593234/how-to-use-activity-indicator-view-on-iphone –
activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
activityIndicator.hidesWhenStopped = YES;
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:activityIndicator];
miejsce następujące, gdzie zawsze jest potrzebna:
[activityIndicator startAnimating];
[activityIndicator stopAnimating];
użyć tej metody
-(void)startAniatingActivityIndicator{
@try {
activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
activityIndicator.frame = CGRectMake(self.window.frame.size.width-30, 32.5, activityIndicator.bounds.size.width, activityIndicator.bounds.size.height);
[self.window addSubview:activityIndicator];
[activityIndicator startAnimating];
[self.window bringSubviewToFront:activityIndicator];
}
@catch (NSException *exception) {
}
@finally {
}
}
-(void)stopAniatingActivityIndicator{
[activityIndicator stopAnimating];
[activityIndicator removeFromSuperview];
activityIndicator = nil;
}
'[self.navigationItem.rightBarButtonItem initWithCustomView: uiBusy]; 'wydaje mi się podejrzany. Spodziewałbym się 'self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView: uiBusy];' jak za odpowiedź @ emotality. –
Dla zapisu: Zwykle chcesz ustawić 'uiBusy.activityIndicatorViewStyle = .gray' – Jeremy
Używam obliczonej właściwości, aby uzyskać dostęp do interfejsu uiBusy:' private var uiBusy: UIActivityIndicatorView { , jeśli pozwala busyView = self.navigationItem.rightBarButtonItem? .customView jako?UIActivityIndicatorView { powrotu busyView } else { pozwolić uiBusy = UIActivityIndicatorView (activityIndicatorStyle: .white) uiBusy.hidesWhenStopped = prawda uiBusy.activityIndicatorViewStyle = .gray self.navigationItem.rightBarButtonItem = UIBarButtonItem (CustomView: uiBusy) powrotu uiBusy } } ' – Jeremy