Desidero sostituire il mio UIBarButtonItem
(utilizzato per l'aggiornamento) con un UIActivityIndicatorView
e, quando l'aggiornamento è terminato, voglio tornare al pulsante di aggiornamento e rimuovere il UIActivityIndicatorView
.Sostituire UIBarButtonItem con UIActivityIndicatorView
risposta
Basta creare due diversi UIBarButtonItem
s
Uno per l'indicatore di attività e un altro per un UIBarButtonItem normale.
UIActivityIndicatorView * activityView = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, 25, 25)];
[activityView sizeToFit];
[activityView setAutoresizingMask:(UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin)];
UIBarButtonItem *loadingView = [[UIBarButtonItem alloc] initWithCustomView:activityView];
[self.navigationItem setRightBarButtonItem:loadingView];
[loadingView release];
[activityView release];
UIBarButtonItem * normalButton = [[UIBarButtonItem alloc] initWithTitle...];
[self.navigationItem setRightBarButtonItem:normalButton];
[normalButton release];
Quando si vuole cambiare loro, proprio riassegnare il rightBarButtonItem
a qualsiasi.
Ecco ciò che funziona per me:
- (void) rightItemButtonWithActivityIndicator
{
UIActivityIndicatorView *activityIndicator = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, 20, 20)];
[activityIndicator startAnimating];
UIBarButtonItem *activityItem = [[UIBarButtonItem alloc] initWithCustomView:activityIndicator];
[activityIndicator release];
self.navigationItem.rightBarButtonItem = activityItem;
[activityItem release];
}
Ho usato una tecnica simile per aggiornare un pulsante in un UIToolbar quando un UIWebView sta caricando (in quanto non sembra essere possibile mostrare/nascondere singola barra pulsanti). In questo caso, è necessario scambiare tutti gli elementi nella UIToolbar.
@property (strong, nonatomic) IBOutlet UIBarButtonItem *refreshBarButton;
@property (nonatomic, strong) UIActivityIndicatorView *activityView;
@property (nonatomic, strong) UIBarButtonItem *activityBarButton;
@property (strong, nonatomic) IBOutlet UIToolbar *toolbar;
@property (strong, nonatomic) IBOutlet UIBarButtonItem *backBarButton;
@property (strong, nonatomic) IBOutlet UIBarButtonItem *refreshBarButton;
@property (strong, nonatomic) IBOutlet UIBarButtonItem *forwardBarButton;
#pragma mark - UIWebViewDelegate
-(void)webViewDidFinishLoad:(UIWebView *)webView{
[self updateButtons];
}
-(void)webViewDidStartLoad:(UIWebView *)webView{
[self updateButtons];
}
-(void)updateButtons{
/*
It's not possible to show/hide bar button items so we need to do swap out the toolbar items in order to show the progress view
*/
//Initialise the activity view
if (self.activityBarButton == nil){
self.activityView = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, 20, 20)];
self.activityBarButton = [[UIBarButtonItem alloc] initWithCustomView:self.activityView];
self.activityBarButton.enabled = NO;
}
NSMutableArray *toolbarItems = [[NSMutableArray alloc] initWithArray:self.toolbar.items];
if ([self.webview isLoading]){
//Replace refresh button with loading spinner
[toolbarItems replaceObjectAtIndex:[toolbarItems indexOfObject:self.refreshBarButton]
withObject:self.activityBarButton];
//Animate the loading spinner
[self.activityView startAnimating];
}
else{
//Replace loading spinner with refresh button
[toolbarItems replaceObjectAtIndex:[toolbarItems indexOfObject:self.activityBarButton]
withObject:self.refreshBarButton];
[self.activityView stopAnimating];
}
//Set the toolbar items
[self.toolbar setItems:toolbarItems];
//Update other buttons
self.backBarButton.enabled = [self.webview canGoBack];
self.forwardBarButton.enabled = [self.webview canGoForward];
}
stavo cercando di fare la stessa cosa, e ho pensato impostazione self.navigationItem.rightBarButtonItem non ha funzionato perché l'indicatore di attività non visualizzerebbe. Si è scoperto che funzionava bene, non potevo vederlo perché ho una barra di navigazione bianca e lo stile UIActivityIndicatorView di default è anch'esso bianco. Quindi era lì ma invisibile. Con lo stile grigio ora posso vederlo.
UIActivityIndicatorView *activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
(Duh.)
- 1. Utilizzo di UIActivityIndicatorView con UIWebView in Swift
- 2. UIActivityIndicatorView non in rotazione
- 3. UIActivityIndicatorView o simili
- 4. Colore personalizzato my UIActivityIndicatorView
- 5. Allineamento personalizzato UIBarButtonItem con iOS7
- 6. UIActivityIndicatorView interrompe l'animazione in UITableViewCell
- 7. Custom UIBarButtonItem
- 8. UIRefreshControl cambia colore di UIActivityIndicatorView
- 9. Layout automatico con UINavigationBar e UIBarButtonItem
- 10. Come nascondere un UIBarButtonItem?
- 11. UIActivityIndicatorView non visualizzato direttamente su UIAlertView
- 12. UIBarButtonItem che non appare
- 13. UIBarButtonItem con UIButton come CustomView - da UIButton, come accedere a UIBarButtonItem?
- 14. UIBarButtonItem evidenziato colori
- 15. Aggiunta di UIActivityindicatorView in un UIAlertView
- 16. Disabilitare tutti gli input mentre UIActivityIndicatorView gira
- 17. Accessibilità/Voice over Requisito su UIActivityIndicatorView
- 18. Aggiungi UIBarButtonItem a navigationItem.titleView?
- 19. Come disabilitare UIBarButtonItem?
- 20. UIBarButtonItem Offset titolo
- 21. Cambia aspetto UIBarButtonItem globale
- 22. Personalizzato "Premuto" UIBarButtonItem Sfondi
- 23. Costante UIBarButtonItem in UINavigationController
- 24. UIToolbar non mostra UIBarButtonItem
- 25. Come cambiare immagine e disabilitare UIBarButtonItem
- 26. Python: sostituire con regex
- 27. Sostituire fabbrica con autofac
- 28. Sostituire getMap con getMapAsync
- 29. Sostituire "#", "$", "%", "&" e "_" con "\ #", "\ $", "\%", "\ &" e "\ _"
- 30. jQuery sostituire con variabile?
Ho un'altra piccola domanda. Con questa implementazione come posso chiamare beginAnimation e stopAnimation su UIActivityIndicatorView? Grazie – Luca
È possibile creare una proprietà per UIActivityIndicatorView. –
Grazie mille – Luca