2009-09-28 14 views

risposta

62

Il modo migliore per farlo è come questo:

// Customize the appearance of table view cells. 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *CellIdentifier = @"myCellId"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
     UIView *v = [[[UIView alloc] init] autorelease]; 
     v.backgroundColor = [UIColor redColor]; 
     cell.selectedBackgroundView = v; 
    } 
    // Set up the cell... 
    cell.textLabel.text = @"foo"; 
    return cell; 
} 

La parte rilevante per voi è l'istruzione cell.selectedBackgroundView = v;. Puoi sostituire la vista molto semplice 'v' qui con qualsiasi vista tu voglia.

+1

Zoran, ho verificato che questo approccio funziona per le viste in tabelle semplici, tuttavia non funziona con i miei gruppi. Qualche soluzione? O puoi confermare questo? –

+0

Non dipende dal tipo di visualizzazione tabella: ho appena scoperto che funziona su alcune tabelle semplici e non su altre tabelle semplici. Tutti usano celle di tabella personalizzate. –

+1

Funziona solo senza fuzz per le viste di tabelle semplici. Per una vista tabella raggruppata avrete effettivamente bisogno di 4 viste per diversi sfondi selezionati; in alto, in basso, tra due altre celle e una singola cella nel gruppo. Poi arriva il dolore di aggiornare questi si modifica il numero di righe in qualsiasi segmento. Pubblica una richiesta di funzionalità su bugreport.apple.com per aggiungere una proprietà "selectedBackgroundGradient" per iPhone OS 4.0. – PeyloW

3

Non penso che tu possa usare un colore personalizzato. Tuttavia, è possibile utilizzare la seguente proprietà di UITableViewCell

@property(nonatomic) UITableViewCellSelectionStyle selectionStyle 

Lo stile di selezione è una costante backgroundView che determina il colore di una cella quando è selezionato. Il valore predefinito è UITableViewCellSelectionStyleBlue. Dal

typedef enum { 
    UITableViewCellSelectionStyleNone, 
    UITableViewCellSelectionStyleBlue, 
    UITableViewCellSelectionStyleGray 
} UITableViewCellSelectionStyle; 

è possibile passare dal blu di default al grigio, o nessuna selezione di colore.

+1

Se hai sottoclassi il tuo UITableViewCell, puoi evidenziare in qualsiasi colore. – mahboudz

+0

Come si fa esattamente questo per UITableViewCells personalizzati progettati con IB o programmaticamente? Voglio dire, c'è qualche metodo/proprietà che permette di farlo SENZA ricorrere a trucchi come mettere un'altra vista in cima alla cella? –

+0

puoi inviarmi il codice per sottoclasse l'UITableViewCell ed evidenziarlo con un colore personalizzato. per favore .. – smakstr

0

Un altro modo per farlo sarebbe spostarsi in una nuova vista sulla cella, con qualsiasi colore desideri e il 50% o più di opacità. Sposta questa vista sulla cella quando ottieni -setSelected: animated: call. Quando dico move, in realtà puoi sempre avere una vista in cima alla tua cella, ma basta disattivare e disattivare il bit nascosto di cui hai bisogno.

6

Mi sono imbattuto anche in questo problema con il tentativo di creare visualizzazioni di celle selezionate personalizzate per la cella raggruppata. Ho risolto questo problema creando 3 tipi di immagini per la parte superiore, media e inferiore della cella assumendo che ci sarà una cella centrale.

NSString *imageFile; 

if (row == 0) { 
imageFile = @"highlighted_cell_top.png"; 
} else if (row == ([registeredDetailsKeys count] - 1)) { 
imageFile = @"highlighted_cell_bottom.png"; 
} else { 
imageFile = @"highlighted_cell_middle.png"; 
} 

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:imageFile]]; 

cell.selectedBackgroundView = imageView; 

Esiste forse un modo più semplice ma sono soddisfatto del risultato.

+0

Per quanto ne so, questo è esattamente il modo di farlo. Vedi questo [tutorial] (http://cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html). Hai dimenticato la variazione "top_bottom" (quando si è solo una singola cella), questo è tutto. – Rich

3

Assicurarsi che dopo si dichiara nell'intestazione

@property(nonatomic) UITableViewCellSelectionStyle selectionStyle 

Implementare

cell.selectionStyle = UITableViewCellSelectionStyleGray 

dove UITableViewCellSelectionStyleGray può essere UITableViewCellSelectionStyleNone, UITableViewCellSelectionStyleBlue, UITableViewCellSelectionStyleGray.

Problemi correlati