Impostazione del colore di sfondo di una cella di visualizzazione tabella su iPhone

Voglio ottenere l’effetto in cui una cella della vista tabella avrà uno sfondo blu, la successiva avrà il bianco, la successiva avrà di nuovo blu, e poi bianca e così via … potresti farmi sapere come posso Fai quello?

Grazie.

Aggiungi questo metodo al delegato della vista tabella:

#pragma mark UITableViewDelegate - (void)tableView: (UITableView*)tableView willDisplayCell: (UITableViewCell*)cell forRowAtIndexPath: (NSIndexPath*)indexPath { cell.backgroundColor = indexPath.row % 2 ? [UIColor colorWithRed: 0.0 green: 0.0 blue: 1.0 alpha: 1.0] : [UIColor whiteColor]; cell.textLabel.backgroundColor = [UIColor clearColor]; cell.detailTextLabel.backgroundColor = [UIColor clearColor]; } 

Devi impostare il colore di sfondo della vista del contenuto della cella

 cell.contentView.backgroundColor = [UIColor colorWithRed...] 

Questo imposterà lo sfondo dell’intera cella.

Per fare ciò per celle alternative, usa indexPath.row e % per 2.

Se si desidera impostare il colore della cella in base a qualche stato nell’object dati della cella effettiva, questo è un altro approccio:

Se si aggiunge questo metodo al delegato della vista tabella:

 - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { cell.backgroundColor = cell.contentView.backgroundColor; } 

Quindi nel tuo metodo cellForRowAtIndexPath puoi fare:

 if (myCellDataObject.hasSomeStateThatMeansItShouldShowAsBlue) { cell.contentView.backgroundColor = [UIColor blueColor]; } 

Ciò evita di dover recuperare nuovamente gli oggetti dati nel metodo willDisplayCell.

Il cell.contentView.backgroundColor = [UIColor colorWithRed...] nella risposta di lostInTransit funziona, a condizione che non si usi l’etichetta integrata di UITableViewCell.

Ho scoperto che se si utilizza l’etichetta built-in, ad esempio impostando cell.text , si finisce con un blocco bianco opaco sotto l’etichetta e solo le due estremità della cella mostrano il colore desiderato.

Non ho trovato alcun modo per modificare l’etichetta integrata in modo che non sia opaco (è ansible accedervi tramite UILabel* cellLabel = [cell.contentView.subviews objectAtIndex:0] ).

Ho risolto il problema aggiungendo la mia UILabel personalizzata. Come questo:

 UILabel* cellLabel = [[[UILabel alloc] initWithFrame:cell.frame] autorelease]; cellLabel.text = @"Test with non-opaque label"; cellLabel.backgroundColor = [UIColor clearColor]; cellLabel.opaque = NO; [cell.contentView addSubview:cellLabel]; cell.contentView.backgroundColor = [UIColor darkGrayColor]; 

per favore aggiungi il seguente codice in cellForRowAtIndexPath

 if (indexPath.row % 2 == 0){ cell.backgroundColor =[UIColor blueColor]; } else { cell.backgroundColor =[UIColor whiteColor]; } 

penso che questo ti aiuterà

Quando si utilizza l’impostazione predefinita della cella della tabella, le seguenti due proprietà coloreranno sia lo sfondo della cella che il colore di sfondo dell’etichetta stessa, evitando la necessità di creare un’etichetta personalizzata come sottoview del contentView della cella.

 cell.textLabel.backgroundColor = [UIColor redColor]; cell.contentView.backgroundColor = [UIColor redColor]; 

// metodo di risparmio di tempo:

// nella cella per il metodo index:

 static NSString* evenIdentifier = @"even"; static NSString* oddIdentifier = @"odd"; __weak identifier; if(indexPath.row %2 ==0) { identifier = evenIdentifier; }else{ identifier = oddIdentifier; } cell = dequeue..WithIdentifier: identifier; if(cell == nil){ cell = allocOrLoadNib...; cell.backgroundColor = (indexPath.row %2 ==0 ? evenColor : oddColor); } 

// cambia il contenuto della cella e poi lo restituisce. Lavoro facile.

// questo è un codice di struttura. Si prega di non copiarlo direttamente.

Questo ha funzionato per me .. In cellForRowAtIndexPath,

 cell.textLabel.backgroundColor = [UIColor clear]; cell.detailTextLabel.backgroundColor = [UIColor clearColor]; cell.contentView.backgroundColor = [UIColor grayColor]; //whichever color u want cell.backgroundColor = cell.contentView.backgroundColor; 

Per il tuo requisito, come menzionato in precedenza in base al valore di IndexPath% 2, puoi eseguire la funzione di cui sopra.

Questo codice è una soluzione leggermente più pulita per il caso in cui si utilizza l’etichetta di testo incorporata e non si desidera che il colore di sfondo bianco dell’etichetta di testo oscuri il colore di sfondo. Questo risolve anche il problema di violare gli angoli arrotondati di uno stile di visualizzazione tabella raggruppato (che si verifica quando si utilizza cell.contentView.backgroundColor anziché cell.backgroundColor):

 UITableViewCell *cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; cell.backgroundColor = [UIColor redColor]; cell.textLabel.backgroundColor = [UIColor clearColor]; //transparent background 
  UIView *bg = [[UIView alloc] initWithFrame:cell.frame]; bg.backgroundColor = [UIColor colorWithRed:175.0/255.0 green:220.0/255.0 blue:186.0/255.0 alpha:1]; cell.backgroundView = bg; [bg release]; 

Tutto quello che devi fare è aggiungere il seguente codice nel file di implementazione del controller di visualizzazione della tabella.

 - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { if (indexPath.row%2 == 0) { UIColor *altCellColor = [UIColor blackColor]; cell.backgroundColor = altCellColor; }} 

È quindi semplice come aggiungere e modificare i valori del modulo.

Aggiungi backgroundView alla cella e imposta il colore di sfondo di tua scelta.

 let backgroundView = View() // add background view via code or via storyboard view.backgroundColor = UIColor.red // your color cell.backgroundView = backgroundView