2009-08-28 14 views
29

So come personalizzare TableViewCell.Come personalizzare la vista in sezione di TableView - iPhone

Ho visto molte applicazioni che personalizzano la cella TableView.

Allo stesso modo, voglio personalizzare TableView Sezione Header

"Supponiamo - Un nome di sezione deve essere in carattere diverso, ha diverse immagini di sfondo, ecc"

E possibile?

In quale metodo Devo implementare il codice?

+2

+1 per la bella domanda. :) – mAc

risposta

60

Invece di utilizzare il metodo normale

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 

si desidera implementare questa:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 

Come si può vedere, il secondo restituisce un UIView invece di stringa per il testo. Pertanto è possibile personalizzare la propria vista (con etichette, ecc.) E restituirla.

Ecco un esempio di come si potrebbe fare che (da attuare nel metodo di cui sopra):

// create the parent view that will hold header Label 
UIView* customView = [[[UIView alloc] initWithFrame:CGRectMake(10,0,300,60)] autorelease]; 

// create image object 
UIImage *myImage = [UIImage imageNamed:@"someimage.png"];; 

// create the label objects 
UILabel *headerLabel = [[[UILabel alloc] initWithFrame:CGRectZero] autorelease]; 
headerLabel.backgroundColor = [UIColor clearColor]; 
headerLabel.font = [UIFont boldSystemFontOfSize:18]; 
headerLabel.frame = CGRectMake(70,18,200,20); 
headerLabel.text = @"Some Text"; 
headerLabel.textColor = [UIColor redColor]; 

UILabel *detailLabel = [[[UILabel alloc] initWithFrame:CGRectZero] autorelease]; 
detailLabel.backgroundColor = [UIColor clearColor]; 
detailLabel.textColor = [UIColor darkGrayColor]; 
detailLabel.text = @"Some detail text"; 
detailLabel.font = [UIFont systemFontOfSize:12]; 
detailLabel.frame = CGRectMake(70,33,230,25); 

// create the imageView with the image in it 
UIImageView *imageView = [[[UIImageView alloc] initWithImage:myImage] autorelease]; 
imageView.frame = CGRectMake(10,10,50,50); 

[customView addSubview:imageView]; 
[customView addSubview:headerLabel]; 
[customView addSubview:detailLabel]; 

return customView; 

Speranza che aiuta

+1

Se la tabella contiene due sezioni, ad esempio, come faresti riferimento alla sezione della seconda tabella, quindi l'intestazione di sezione 1 avrebbe un headerLabel.text diverso dall'intestazione di sezione 2? – iamtoc

+1

Dal numero intero che è passato al metodo. –

+2

Cosa succede se voglio avere solo un'intestazione per section = 1 e non per section = 0? Sto riscontrando un problema con questo problema ... – jsetting32

Problemi correlati