Mi chiedo come cambiare il colore di evidenziazione / selezione blu di a UITableViewCell, qualche idea?
Mi chiedo come cambiare il colore di evidenziazione / selezione blu di a UITableViewCell, qualche idea?
Risposte:
È possibile modificare il colore di evidenziazione in diversi modi.
Cambia la proprietà selectionStyle della tua cella. Se lo cambi in UITableViewCellSelectionStyleGray, sarà grigio.
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.
selectedBackgroundViewsemplicemente non verrà mai visualizzato. Solo dopo aver impostato "Selezione" su Predefinito, viene selectedBackgroundViewvisualizzato. Testato su iOS 6 e 7.
cell.selectedBackgroundView = [UIView new];e imposti il colore che desideri:cell.selectedBackgroundView.backgroundColor = [UIColor colorWithHex:@"ecf2f5" andAlpha:1];
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;
UITableViewCellselectedBackgroundViewper essere quella UIViewche ho creato con il colore di sfondo sceltoQuesto ha funzionato bene per me. Grazie per il suggerimento Zonble.
UITableViewCell ha tre stili di selezione predefiniti: -
L'attuazione è la seguente: -
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *) indexPath {
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
}
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
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
}
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.
selectedBackgroundView all'inizio del metodo addself. selectedBackgroundView = [UIView new];
selectedBackgroundViewproprietà.
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;
}
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
}
}
}
@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.
UIColor.clear, no UIColor.clearColor(). Non sono sicuro che sia un cambiamento anche in Swift ma funziona anche senza @IBDesignable.
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
}