2009-08-12 11 views
8

Perché non la cella mostra nulla in questo codice:IPhone SDK: Aggiunta di un UIActivityIndicatorView ad un UITableViewCell

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

sto facendo questo all'interno tableView:cellForRowAtIndexPath:.

Ho provato le dimensioni per adattarle, creare una cornice per cell.imageView e una cornice della stessa dimensione per lo spinner, ma non funziona.

Cosa c'è di sbagliato con questo codice?

Grazie ..!

+0

Si sta impostando la cornice del indicatore di attività? Qualcosa come spinner.frame = CGRectMake (0, 0, 30, 30)? Puoi anche controllare il frame e la visibilità di cell.imageView stesso. – Tyler

+0

Sì, ho creato entrambi, il frame di spinner e impostato la sua visibilità ... Ma ho trovato la risposta come ho descritto muggito ... Grazie per l'aiuto ..! – Thiago

risposta

3

Penso che l'imageView della cella avrà probabilmente un rettangolo a dimensione zero, perché non è stata inserita alcuna immagine. Quindi lo spinner è dentro ma invisibile.

Così, invece di mettere il filatore all'interno della ImageView, appena messo all'interno della cellula ...

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

si potrebbe anche fare

cell.accessoryView = spinner; 

di mettere il filatore sopra all'estrema destra della cella.

+0

L'acessoryView ha funzionato molto bene ... Ma lo spinner.frame non ... Ho trovato una soluzione che è quella di creare un UIImage "quadrato bianco" e metterli come cell.imageView.image ... Loro lo spinner appare ... Ma grazie per il tuo aiuto..! – Thiago

+0

mi dispiace per quello; Avrei dovuto provarlo io stesso piuttosto che fidarmi dell'altro commentatore! –

9

ho trovato la risposta ...

David Maymudes era partialy giusto ... E'necessario avere un "background" al cell.imageView ... Ma deve essere un'immagine, non solo un telaio. Quindi crea una UIImage come "sfondo bianco" e imposta in cell.imageView.image. Il codice sarà:

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]; 

Il whiteback.png è solo un quadrato bianco 25x25 pixel ...

Grazie per tutti aiutano ... vediamo ...

9

Una leggera modifica il metodo da Thiago:

credo che l'aggiunta del filatore direttamente alla vista di cella sentivo un po 'hacky, così ho usato un 1x1 png trasparenti come la vista dell'immagine e ridimensionata per essere tutto ciò che la mia taglia è filatore:

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; 

che dà un cellulare che assomiglia a questo:

loading cell

+0

funziona come un fascino :-) – crosscode

Problemi correlati