Come modificare il colore di evidenziazione blu di un UITableViewCell?


131

Mi chiedo come cambiare il colore di evidenziazione / selezione blu di a UITableViewCell, qualche idea?

Risposte:


213

È possibile modificare il colore di evidenziazione in diversi modi.

  1. Cambia la proprietà selectionStyle della tua cella. Se lo cambi in UITableViewCellSelectionStyleGray, sarà grigio.

  2. Cambia la selectedBackgroundViewproprietà. In realtà ciò che crea il gradiente blu è una vista. È possibile creare una vista e disegnare ciò che più ti piace e utilizzare la vista come sfondo delle celle della vista tabella.


8
fantastico, ho
Thomas Joos

1
Mi sono reso conto che in IB non è possibile impostare "Selezione" di UITableViewCell su "Nessuno", perché selectedBackgroundViewsemplicemente non verrà mai visualizzato. Solo dopo aver impostato "Selezione" su Predefinito, viene selectedBackgroundViewvisualizzato. Testato su iOS 6 e 7.
Jonny l'

12
Grazie per l'ottima nota! Questo ora lo rende così semplice: crei una nuova vista (non è nemmeno necessario specificare la cornice: cell.selectedBackgroundView = [UIView new];e imposti il ​​colore che desideri:cell.selectedBackgroundView.backgroundColor = [UIColor colorWithHex:@"ecf2f5" andAlpha:1];
Dannie P,

guarda in fondo a questa pagina, ci sono approcci più recenti
Climbatize

144

Zonble ha già fornito un'ottima risposta. Ho pensato che potesse essere utile includere uno snippet di codice breve per aggiungere un UIViewalla cella tableview che verrà visualizzata come vista di sfondo selezionata.

cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];

    UIView *selectionColor = [[UIView alloc] init];
    selectionColor.backgroundColor = [UIColor colorWithRed:(245/255.0) green:(245/255.0) blue:(245/255.0) alpha:1];
    cell.selectedBackgroundView = selectionColor;
  • cell è la mia UITableViewCell
  • Ho creato un UIView e impostato il colore di sfondo usando i colori RGB (grigio chiaro)
  • Ho quindi impostato la cella selectedBackgroundViewper essere quella UIViewche ho creato con il colore di sfondo scelto

Questo ha funzionato bene per me. Grazie per il suggerimento Zonble.


2
Questo non funziona troppo bene quando si usano le viste tabella con sezioni. Se selezionata, la cella perderà i bordi e non verrà arrotondata quando la prima o l'ultima cella.
Kirk Woll,

7
@kirk, vuoi dire raggruppati :)
Tieme

@Tieme, no, intendo sezioni : "Una vista tabella è composta da zero o più sezioni, ognuna con le proprie righe."
Kirk Woll,

Devi inserirlo all'interno di "cellForRowAtIndexPath". Funziona bene per me, con una sezione. Non l'ho provato con più sezioni.
Vincent,

Un po 'in ritardo al gioco, ma posso confermare che funziona in una tabella con più sezioni (non raggruppate)
matto0

30

UITableViewCell ha tre stili di selezione predefiniti: -

  1. Blu
  2. Grigio
  3. Nessuna

L'attuazione è la seguente: -

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

     [cell setSelectionStyle:UITableViewCellSelectionStyleNone];       
}

7
anziché questi tre stili predefiniti, possiamo anche personalizzare il nostro stile previsto tramite la proprietà selectedBackgroundView.
Sunil Targe,

Ha funzionato per me ... Grazie mille.
Mujeeb Farooqi,

19

In Swift, usa questo in cellForRowAtIndexPath

let selectedView = UIView()
selectedView.backgroundColor = .white
cell.selectedBackgroundView = selectedView

Se vuoi che il tuo colore di selezione sia lo stesso in tutti UITableViewCell, usa questo in AppDelegate.

let selectedView = UIView()
selectedView.backgroundColor = .white
UITableViewCell.appearance().selectedBackgroundView = selectedView

18

Se si desidera modificarla a livello di app, è possibile aggiungere la logica al delegato dell'app

class AppDelegate: UIResponder, UIApplicationDelegate {

    //... truncated

   func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool {

        // set up your background color view
        let colorView = UIView()
        colorView.backgroundColor = UIColor.yellowColor()

        // use UITableViewCell.appearance() to configure 
        // the default appearance of all UITableViewCells in your app
        UITableViewCell.appearance().selectedBackgroundView = colorView

        return true
    }

    //... truncated
}

Perfetto. Qualche idea su come impostare il colore del testo di quella cella predefinita a livello globale su select?
Banana

1
funziona, ma la selezione viene cancellata direttamente quando si preme il nuovo controller di visualizzazione.
bobmoff,

Bel modo di apportare modifiche globali a UITableViewCell
Shashi3456643

12

per completezza: se hai creato la tua sottoclasse UITableViewCell, puoi implementare il - (void)setSelected:(BOOL)selected animated:(BOOL)animatedmetodo e impostare il colore di sfondo di una vista aggiunta nella vista contenuto. (se questo è il caso) o del contentView stesso (se non è coperto da una delle tue visualizzazioni.

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    if(selected) {
        self.contentView.backgroundColor = UIColor.blueColor;
    } else {
        self.contentView.backgroundColor = UIColor.whiteColor;
    }
}

(non usato? per adattarsi alla piccola larghezza del codice sorgente DIV :)

questo approccio presenta due vantaggi rispetto all'utilizzo di selectedBackgroundView, utilizza meno memoria e un po 'meno CPU, cosa che non noteresti nemmeno se non visualizzi centinaia di celle.


Funziona solo dopo una nuova visualizzazione assegnata selectedBackgroundView all'inizio del metodo addself. selectedBackgroundView = [UIView new];
enadun,

@enadun Questo metodo funziona per me su iOS 12, senza alcuna impostazione della selectedBackgroundViewproprietà.
Nate,

11

Devo impostare lo stile di selezione affinché il UITableViewCellSelectionStyleDefaultcolore di sfondo personalizzato funzioni. Se qualsiasi altro stile, il colore di sfondo personalizzato verrà ignorato. Testato su iOS 8.

Il codice completo per la cella come segue:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"MyCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    // This is how you change the background color
    cell.selectionStyle = UITableViewCellSelectionStyleDefault;
    UIView *bgColorView = [[UIView alloc] init];
    bgColorView.backgroundColor = [UIColor redColor];
    [cell setSelectedBackgroundView:bgColorView];

    return cell;
}

6

In base alla risposta di @utente , puoi semplicemente aggiungere questa estensione in qualsiasi punto del codice dell'app e avere il colore di selezione direttamente nell'editor dello storyboard per ogni cella dell'app:

@IBDesignable extension UITableViewCell {
    @IBInspectable var selectedColor: UIColor? {
        set {
            if let color = newValue {
                selectedBackgroundView = UIView()
                selectedBackgroundView!.backgroundColor = color
            } else {
                selectedBackgroundView = nil
            }
        }
        get {
            return selectedBackgroundView?.backgroundColor
        }
    }
}

Colore di selezione UITableViewCell nello storyboard


5
@IBDesignable class UIDesignableTableViewCell: UITableViewCell {
  @IBInspectable var selectedColor: UIColor = UIColor.clearColor() {
    didSet {
      selectedBackgroundView = UIView()
      selectedBackgroundView?.backgroundColor = selectedColor
    }
  }
}

Nello storyboard, imposta la classe di UITableViewCell su UIDesignableTableViewCell, nella finestra di ispezione Attributi, puoi cambiare il colore selezionato della tua cella in qualsiasi colore.

Puoi usarlo per tutte le tue celle. Ecco come apparirà il tuo ispettore Attributi.

Ecco come apparirà il tuo ispettore Attributi


Molto creativo! grande!
Kaushil Ruparelia,

puoi renderlo ancora più semplice, guarda la mia risposta;) stackoverflow.com/a/51764804/537694
Climbatize

Uso una cella personalizzata per impostare le etichette, quindi funziona bene, grazie! Cambia per Swift 5: è adesso UIColor.clear, no UIColor.clearColor(). Non sono sicuro che sia un cambiamento anche in Swift ma funziona anche senza @IBDesignable.
Neph,

5

Swift 3.0 / 4.0

Se hai creato la tua cella personalizzata, puoi cambiare il colore di selezione awakeFromNib()per tutte le celle:

 override func awakeFromNib() {
    super.awakeFromNib()

    let colorView = UIView()
    colorView.backgroundColor = UIColor.orange.withAlphaComponent(0.4)

    self.selectedBackgroundView = colorView


}

0

1- Aggiungi una vista alla vista del contenuto della tua cella.
2- Fare clic con il tasto destro del mouse sulla cella.
3- Rendi la vista aggiunta come "selectedBackgroundView" inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.