2010-10-08 13 views
5

Sto provando a scrivere codice per modificare il colore di sfondo di una cella in base alla sua posizione nella tabella. Mentre il seguente codice 'funziona', effettua solo le celle che gli vengono passate. Le celle vuote non vengono effettuate.Come si modifica il colore di sfondo di un oggetto UITableViewCell vuoto in base alla sua posizione?

- (void)tableView: (UITableView*)tableView willDisplayCell: (UITableViewCell*)cell forRowAtIndexPath: (NSIndexPath*)indexPath 
{ 
    if(!indexPath.row%2) 
    { 
     cell.backgroundColor = [UIColor colorWithRed: 0.0 green: 0.0 blue: 1.0 alpha: 1.0] ; 
     NSLog(@"Blue"); 
    } 
    else{ 
     cell.backgroundColor = [UIColor whiteColor]; 
     NSLog(@"white"); 
    } 
    cell.textLabel.backgroundColor = [UIColor clearColor]; 
    cell.detailTextLabel.backgroundColor = [UIColor clearColor]; 
} 

Come posso effettuare il resto delle celle che vengono visualizzate, se vuote, quando ci sono pochi elementi nell'elenco?

Con celle "vuote", si intendono le celle segnaposto che vengono visualizzate quando l'origine dati non dispone di dati sufficienti per riempire l'intera vista fornita alla vista tabella. Ad esempio, se puoi montare 10 celle, ma hai solo 5 dati validi, ti vengono sempre consegnate solo 5 celle - le 5 successive sono vuote e per quanto posso dire, inaccessibili.

+0

quindi vuoi che le celle della tabella si alternino tra blu e bianco, indipendentemente dal fatto che ci siano dati nelle celle o se sono vuoti? – Nabou

+0

@Nabou Sì, era quello che desideravo - c'era una volta. In realtà sono passato negli anni tra un momento e l'altro, però. Questo problema è puramente teorico a questo punto. L'app è "morta" molto tempo fa (e così anche l'intera azienda lo ha sviluppato) – RonLugge

risposta

0

Si dovrebbe implementare

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

nel vostro delegato e inizializzare le celle che si desidera.

+0

Sfortunatamente, non sembra funzionare. Aggiunta del codice: cell.backgroundColor = [UIColor colorWithRed: 1.0 green: 0.0 blue: 0.0 alpha: 1.0]; non fa nulla per cambiare una qualsiasi delle celle, tutte escono dal colore bianco-grigio predefinito. – RonLugge

2

Immagino che vogliate cambiare lo sfondo solo delle celle "vuote" ... Quindi potete cambiare il backgroundColor in InterfaceBuilder di UITableView. Ma interesserà tutte le celle vuote.

È inoltre possibile modificare il tipo di separatore.

Inoltre, dare un'occhiata qui: http://www.zenbrains.com/blog/en/2010/06/color-de-fondo-de-celdas-vacias/

EDIT:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    // 7 depends on how many cell is shown 
    return ([source count] <= 7) ? 7 : [source count]; 
} 

Da: Show blank UITableViewCells in custom UITableView

+0

Voglio eseguire tutte le celle - Voglio che tutte le celle visualizzate rimbalzino avanti e indietro tra i due colori indicati.Ahimè, il link che hai mostrato non fornisce una fonte utile; se provo a impostare il colore di sfondo di contentView, non cambia il colore dell'intera cella correttamente. C'è una "striscia" di colore invariato a destra. E cambiando così sto cambiando selectedBackgroundView, o solo backgroundView, non fa nulla neanche. – RonLugge

+0

Modifica la mia risposta: è necessario aggiungere da soli celle aggiuntive e ora in cellForRowAtIndexPath tutte le celle saranno personalizzabili. –

+1

Il problema è che non ho quelle celle aggiuntive (in termini di dati di origine), che causano altri risultati non voluti. – RonLugge

1

Dovrebbe funzionare se la proprietà backgroundColor della contentView della cella è impostato, non è il backgroundColore della cella:

cell.contentView.backgroundColor = [UIColor colorWithRed: 0.0 green: 0.0 blue: 1.0 alpha: 1.0] ; 
+0

Ho modificato la domanda per rendere più chiaro il punto. (Anche se sono sorpreso che questo sia stato scoperto due anni dopo ...) – RonLugge

0

provo ad aggiungere la seguente riga

[[cell contentView] setBackgroundColor:[UIColor colorWithRed:0 green:128/255.f blue:0 alpha:1]]; 

nel metodo

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

con la stessa logica utilizzata nel metodo willDisplayCell

come suggerito qui: http://www.zenbrains.com/blog/en/2010/06/color-de-fondo-de-celdas-vacias/

* notare che cambiamo il colore di sfondo per [cell contentView]

+0

Leggi la domanda più da vicino. Non si tratta di impostare il colore di sfondo della tabella, ma ho voluto alternare il colore delle celle effettive, incluse le celle vuote. – RonLugge

Problemi correlati