Aquí podría ser tu PUBLICIDAD


¿Cómo puedo crear un botón con un UIActivityIndicator en mi barra de navegación con el mismo estilo que los botones normales?

votos
11

Todos los ejemplos que he visto aquí y otros sitios implicaron la creación de UIActivityIndicatorView y su carga con algo como:

self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] 
                   initWithCustomView:myActivityIndicatorView 
                   target:nil 
                   action:nil] 
                  autorelease];

Sin embargo, eso solo crea un indicador de actividad simple en la barra de navegación. Lo que quiero hacer es tener un botón que se parezca a los botones UIBarButtonSystemItem normales, pero con un indicador de actividad en lugar de una de las imágenes predeterminadas. Intenté hacer initWithImage e initWithTitle con imágenes o títulos nulos y luego agregar el indicador de actividad como subvista, pero eso no funciona.

¿Algunas ideas?

Publicado el 12/03/2009 a las 18:33
fuente por usuario Jarin Udom
En otros idiomas...        العربية       

4 respuestas

votos
6

Mi solución es crear una subclase de UIButton:

en SOActivityButton.h :

@interface SOActivityButton : UIButton 
{
UIActivityIndicatorView* activityIndicator;
}
@end

en SOActivityButton.m :

@implementation SOActivityButton

- (id)initWithFrame:(CGRect)frame 
{
    if (self = [super initWithFrame:frame]) 
    {
        CGRect innerFrame = CGRectInset(frame, 8.0f, 8.0f);
        activityIndicator = [[UIActivityIndicatorView alloc]
                                    initWithFrame:innerFrame];
        activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhite;
        [self addSubview:activityIndicator];
    }
    return self;
}

- (void)dealloc 
{
    [activityIndicator release], activityIndicator = nil;
    [super dealloc];
}

- (void) startAnimating
{   
    [activityIndicator startAnimating];
}

- (void) stopAnimating
{   
    [activityIndicator stopAnimating];
}
@end

Luego de usarlo:

SOActivityButton* activityButton = [[SOActivityButton alloc] 
                    initWithFrame:CGRectMake(0.0f, 0.0f, 32.0f, 32.0f)];
[activityButton setImage:[UIImage imageNamed:@"button-background.png"]
                    forState:UIControlStateNormal];
[activityButton addTarget:self action:@selector(myAction:) 
                    forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *activityBarButtonItem = [[UIBarButtonItem alloc] 
                    initWithCustomView:activityButton];
[activityButton release];
self.navigationItem.rightBarButtonItem = activityBarButtonItem;
[activityBarButtonItem release];

Usted tendrá que encontrar o crear un botón-background.png . El PSD aquí debe tener uno.

Respondida el 09/03/2010 a las 07:26
fuente por usuario Alan Rogers


Aquí podría ser tu PUBLICIDAD


votos
1

Aquí hay algo que puede ayudar:

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];
[activityIndicator startAnimating];
Respondida el 21/08/2009 a las 04:45
fuente por usuario Carlos

votos
1

Tengo esto funcionando y es muy simple. Simplemente coloque el indicador de actividad donde lo desee con IB, pero asegúrese de que esté más abajo en la lista que la barra en la que lo desea, y que esté en el "nivel superior" (no en una subvista de otra cosa). Luego, controle el código a través de una toma de corriente.

Respondida el 29/05/2009 a las 05:41
fuente por usuario Steve Weller

votos
1

¿Has intentado crear un UIButton en la barra de botones y luego agregar un indicador de actividad como subvista del UIButton?

Respondida el 12/03/2009 a las 08:12
fuente por usuario Roger Nolan