2012-01-13 7 views
6

Ho un'app con storyboard. In una scena ho una vista tabella con contenuto di celle statiche. È possibile cambiare il colore selezionato dello sfondo con un altro colore rispetto alle opzioni predefinite (blu e grigio)?Come modificare le celle statiche dello storyboard del colore selezionato di sfondo

Lo so Se posso cambiare il colore di sfondo della cella in forRowAtIndexPath ma in questo caso non ho alcuna funzione dell'origine dati da tableview. Sono sicuro che è possibile da IB o un'altra funzione che posso modificare ...

Grazie in anticipo!

risposta

8

Ho avuto lo stesso problema. La soluzione ha due parti:

1) ottenere le celle, guardare this. 2) cambiare il colore di sfondo: è necessario creare un UIView con il colore di sfondo che ti serve e impostarla come selectedBackgroundView della cella

Per esempio, ho usato questo codice nella viewDidLoad del UITableViewController:

UIView *backgroundSelectedCell = [[UIView alloc] init]; 
[backgroundSelectedCell setBackgroundColor:[UIColor colorWithRed:130/256.0 green:169/256.0 blue:171/256.0 alpha:1.0]]; 

for (int section = 0; section < [self.tableView numberOfSections]; section++) 
    for (int row = 0; row < [self.tableView numberOfRowsInSection:section]; row++) 
    { 
     NSIndexPath* cellPath = [NSIndexPath indexPathForRow:row inSection:section]; 
     UITableViewCell* cell = [self.tableView cellForRowAtIndexPath:cellPath]; 

     [cell setSelectedBackgroundView:backgroundSelectedCell]; 
    } 
+0

Grazie Carlos ... sei spagnolo? – Camacho

+0

Questo approccio probabilmente funziona. Non so davvero come si comporterà quando avrai un mucchio di celle e le rotoli del tavolo. Nelle celle dinamiche, vengono memorizzate nella cache e scartate quando necessario. La modifica dello sfondo durante il metodo didLoad garantisce che le prime celle di presentazione abbiano un colore di sfondo corretto, ma potrebbe non garantire che le celle di scorrimento manterranno tale riferimento. Ad ogni modo, ha bisogno di una codifica, e una cella statica è pensata per l'uso senza bisogno di codice ... Ho postato una risposta che ti permette di farlo senza codifica. –

18

Non è necessario scrivere una sola riga di codice per ottenere ciò. Puoi fare tutto usando lo storyboard. Basta fare quello:

  1. Aggiungi un UIView al UITableViewCell e collegarlo al selectedBackgroundView di proprietà della cella (per trovare questa proprietà, è necessario trascinare la linea dalla "New Reference Outlet" e rilasciarlo sopra il desiderato UITableViewCell)
  2. Cambiare il colore della UIView al colore desiderato dello stato selezionato

È possibile fare la stessa cosa con la proprietà backgroundView. Inoltre, è possibile utilizzare uno UIImageView per utilizzare un'immagine, anziché lo sfondo a colore singolo di uno UIView.

Ecco un esempio di file utilizzando un UIViewController personalizzato al posto di un UITableViewController, ma funziona su entrambi: http://uxp.com.br/downloads/CustomCell.zip

+0

ottimo approccio! Questo è il modo di lavorare con gli storyboard, che molti di noi non hanno familiarità con e con i quali si pensa abbiano a che fare. Grazie! – brainray

+2

Come hai fatto a ottenere questo errore? http: // StackOverflow.it/questions/13090338/runtime-error-setting-backroundview-property-of-uitableviewcell-in-storyboard –

+0

Non sto utilizzando AutoLayout. Forse è per questo che non ho alcun errore. Ma mi sembra un insetto. Hai riempito un bug in Apple? –

-2

ecco una soluzione per quelli di noi usare la configurazione automatica su X-Code 5 + ...

Per le celle statiche, si può presumibilmente cambiare il colore di sfondo, ma non funzionerà. Ogni singola cella, tuttavia, avrà automaticamente una vista del contenuto al suo interno in IB. Se cambiamo lo sfondo di questa vista contenuto, cambia lo sfondo della cella.

Solo qualcosa da aggiungere alla risposta di @Leandro Alves, quindi non dobbiamo trascinare extra UIViews sul nostro progetto!

+0

Questo non cambierà il colore di sfondo selezionato. – phatmann

Problemi correlati