2012-01-12 15 views
6

Sto cercando di colorare certa riga della tabella con il rosso così ho provato ad aggiungerecell.backgroundColor non risponde se impostato in tableView: cellForRowAtIndexPath

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
... init Code here 
cell.backgroundColor = [UIColor redColor]; 
cell.accessoryType = UITableViewCellAccessoryCheckmark; 
} 

appare L'accessorio Checkmark ma non il colore rosso.

In seguito ho scoperto che posizionandolo in tableView: willDisplayCell funziona. È questo in base alla progettazione? perché sta ignorando il valore che ho già impostato al momento dell'inizializzazione della cella?

risposta

3

L'aspetto della cella è personalizzato in tableView:willDisplayCell. Quindi, per rispondere alla tua domanda, sì, è di progettazione. Le viste accessorie e le sottoview della cella contentView devono essere modificate/assegnate in cellForRowAtIndexPath.

Dalla documentazione di tableView:willDisplayCell:forRowAtIndexPath::

Una vista tabella invia questo messaggio al suo delegato appena prima che utilizza cellule per disegnare una riga, permettendo così il delegato per personalizzare l'oggetto cella prima di essere visualizzato. Questo metodo offre al delegato la possibilità di sovrascrivere le proprietà basate sullo stato impostate in precedenza dalla vista tabella, come la selezione e il colore di sfondo. Dopo la restituzione del delegato, la vista tabella imposta solo le proprietà alfa e del frame e solo quando si animano le righe mentre si spostano all'interno o all'esterno.

1

FYI, la risposta di Ravi è corretta, ma se desideri semplificare la tua implementazione, puoi anche impostare il colore di sfondo contentView della cella per ottenere lo stesso effetto.

cell.contentView.backgroundColor = [UIColor redColor];

Questa non è la soluzione documentato, ma il seguente funziona:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
... init Code here 
    cell.contentView.backgroundColor = [UIColor redColor]; 
    cell.accessoryType = UITableViewCellAccessoryCheckmark; 
} 
Problemi correlati