2009-08-12 13 views
8

¿Por qué no la celda muestra nada en este código:iPhone SDK: Adición de un UIActivityIndicatorView a un UITableViewCell

UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
[cell.imageView addSubview:spinner]; 
[spinner startAnimating]; 
[email protected]"Carregando..."; 
[spinner release]; 

que estoy haciendo esto dentro de tableView:cellForRowAtIndexPath:.

Intenté tamaño para caber, creo un marco para cell.imageView y un marco del mismo tamaño para la ruleta, pero nada funciona.

¿Qué pasa con este código?

Gracias ..!

+0

Es usted la creación del marco del indicador de actividad? Algo así como spinner.frame = CGRectMake (0, 0, 30, 30)? También puede verificar el marco y la visibilidad de cell.imageView. – Tyler

+0

Sí, creé ambos, el marco giratorio y configuré su visibilidad ... Pero encontré la respuesta como describí a continuación ... ¡Gracias por la ayuda ...! – Thiago

Respuesta

3

Creo que el imageView de la celda probablemente tendrá un rectángulo de tamaño cero, porque no ha puesto una imagen en él. Entonces el spinner está adentro pero invisible.

Así que en lugar de poner la ruleta en el imageView, sólo hay que poner dentro de la célula ...

[cell addSubview:spinner]; 
spinner.frame = CGRectMake(145, 0, 30, 30); // if you want it centered horizontally... 

también se puede hacer

cell.accessoryView = spinner; 

de poner la ruleta más a la derecha de la célula

+0

The acessoryView funcionó muy bien ... Pero el spinner.frame no ... Encontré una solución que es crear un UIImage de "cuadro blanco" y ponerlos como cell.imageView.image ... Aparecen los spinners. ... De cualquier modo gracias por su ayuda..! – Thiago

+0

siento eso; ¡Debería haberlo probado yo mismo en lugar de confiar en el otro comentarista! –

9

encontré la respuesta ...

David Maymudes era PARCIALMENTE bien ... Está necesario tener un "fondo" para la cell.imageView ... Pero debe ser una imagen, no sólo una marco. Así que solo crea un UIImage como un "fondo blanco" y configúralo en cell.imageView.image. El código será:

UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] 
     initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
UIImage *whiteback = [[UIImage alloc] initWithContentsOfFile:@"whiteback.png"]; 
cell.imageView.image = whiteback; 
[cell.imageView addSubview:spinner]; 
[spinner startAnimating]; 
[email protected]"Carregando..."; 
[whiteback release]; 
[spinner release]; 

la whiteback.png es sólo un cuadrado blanco 25x25 píxeles ...

Gracias por todo el mundo ayudan ... Nos vemos ...

9

Una ligera modificación de el método de Thiago:

Creo que la adición de la ruleta directamente a la vista de células sentí un poco hacky, por lo que utiliza un png transparente de 1x1 como la vista de la imagen y cambiar de tamaño que sea lo que sea el tamaño de mi spinner es:

UITableViewCell *cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"NoReuse"] autorelease]; 
cell.textLabel.text = @"Loading..."; 

UIActivityIndicatorView *spinner = [[[UIActivityIndicatorView alloc] 
    initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray] autorelease]; 

// Spacer is a 1x1 transparent png 
UIImage *spacer = [UIImage imageNamed:@"spacer"]; 

UIGraphicsBeginImageContext(spinner.frame.size); 

[spacer drawInRect:CGRectMake(0,0,spinner.frame.size.width,spinner.frame.size.height)]; 
UIImage* resizedSpacer = UIGraphicsGetImageFromCurrentImageContext(); 

UIGraphicsEndImageContext(); 
cell.imageView.image = resizedSpacer; 
[cell.imageView addSubview:spinner]; 
[spinner startAnimating]; 

return cell; 

Eso da una célula que tiene este aspecto:

loading cell

+0

funciona como un encanto :-) – crosscode

Cuestiones relacionadas