Quiero reemplazar mi UIBarButtonItem
(usado para actualización) con un UIActivityIndicatorView
y, cuando termine la actualización, quiero volver al botón de actualización y eliminar el UIActivityIndicatorView
.Reemplazar UIBarButtonItem con UIActivityIndicatorView
Respuesta
Basta con crear dos diferentes UIBarButtonItem
s
Uno para el indicador de actividad y otro para un UIBarButtonItem normal.
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];
Cuando desee cambiar ellos, sólo reasignar la rightBarButtonItem
a cualquier.
Aquí lo que funciona para mí:
- (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];
}
que utiliza una técnica similar para actualizar un botón en un UIToolbar cuando un UIWebView está recargando (ya que no parece ser posible mostrar/ocultar barra individual elementos del botón). En este caso, debe intercambiar todos los elementos en la barra de publicaciones de UIT.
@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];
}
yo estaba tratando de hacer lo mismo, y me pareció establecer self.navigationItem.rightBarButtonItem no funcionó debido a que el indicador de actividad, no se mostrará. Resulta que estaba funcionando bien, simplemente no pude verlo porque tengo una barra de navegación blanca y el estilo predeterminado UIActivityIndicatorView también es blanco. Así que estaba allí pero invisible. Con el estilo gris, ahora puedo verlo.
UIActivityIndicatorView *activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
(Duh.)
- 1. iPad - iPhone UIActivityIndicatorView grande
- 2. UIBarButtonItem con color?
- 3. UIActivityIndicatorView no gira
- 4. Color personalizado mi UIActivityIndicatorView
- 5. UIActivityIndicatorView o similares
- 6. Crear un UIActivityIndicatorView personalizado
- 7. Agregar UIActivityindicatorView en un UIAlertView
- 8. UIActivityIndicatorView para Mac OS X?
- 9. UIBarButtonItem con imagen personalizada y sin borde
- 10. UIBarButtonItem con UIButton como CustomView - desde UIButton, cómo acceder al UIBarButtonItem está en?
- 11. UIActivityIndicatorView no se muestra correctamente en UIAlertView
- 12. Transformar (rotar) un UIBarButtonItem
- 13. Añadir UIBarButtonItem a navigationItem.titleView?
- 14. Reemplazar "con \"
- 15. Desactivar todas las entradas mientras UIActivityIndicatorView spinning
- 16. Cómo deshabilitar UIBarButtonItem?
- 17. UIToolbar no mostrar UIBarButtonItem
- 18. Cómo cambiar la imagen y desactivar UIBarButtonItem
- 19. ¿Cómo puedo ocultar un UIBarButtonItem?
- 20. Sin sombra/Relieve en UIBarButtonItem
- 21. Python Reemplazar \\ con \
- 22. Reemplazar temperatura con consulta
- 23. SELECCIONAR con un Reemplazar()
- 24. Python: reemplazar con regex
- 25. Reemplazar UpdatePanel con JQuery
- 26. Reemplazar MouseOver con .hoverIntent
- 27. reemplazar rand() con openssl_random_pseudo_bytes()
- 28. Android reemplazar con regex
- 29. reemplazar ereg_replace con preg_replace
- 30. Reemplazar 'con \' en Ruby?
tengo otra pequeña pregunta. Con esta implementación, ¿cómo puedo llamar a beginAnimation y stopAnimation en UIActivityIndicatorView? Gracias – Luca
Puede crear una propiedad para UIActivityIndicatorView. –
Muchas gracias – Luca