Je me demande comment changer la couleur de surbrillance / sélection bleue d’un UITableViewCell
, des idées?
Vous pouvez changer la couleur de mise en évidence de plusieurs manières.
Modifiez la propriété selectionStyle de votre cellule. Si vous le modifiez en UITableViewCellSelectionStyleGray
, il sera gris.
Modifiez la propriété selectedBackgroundView
. En fait, ce qui crée le dégradé bleu est une vue. Vous pouvez créer une vue et dessiner ce que vous voulez et utiliser la vue comme arrière-plan des cellules de votre vue de table.
Zonble a déjà fourni une excellente réponse. J’ai pensé qu’il pourrait être utile d’inclure un extrait de code abrégé pour append un UIView
à la cellule de tableview qui se présenterait comme vue d’arrière-plan sélectionnée.
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;
UITableViewCell
selectedBackgroundView
comme UIView
que j’ai créée avec la couleur de fond choisie Cela a bien fonctionné pour moi. Merci pour le conseil Zonble.
UITableViewCell
dispose de trois styles de sélection par défaut: –
La mise en œuvre est la suivante: –
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *) indexPath { [cell setSelectionStyle:UITableViewCellSelectionStyleNone]; }
Si vous souhaitez le modifier en largeur, vous pouvez append la logique à votre délégué d’application.
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 }
Dans Swift, utilisez ceci dans cellForRowAtIndexPath
let selectedView = UIView() selectedView.backgroundColor = .white cell.selectedBackgroundView = selectedView
Si vous voulez que votre couleur de sélection soit la même dans tous les UITableViewCell
, utilisez-la dans AppDelegate
.
let selectedView = UIView() selectedView.backgroundColor = .white UITableViewCell.appearance().selectedBackgroundView = selectedView
pour être complet: si vous avez créé votre propre sous-classe de UITableViewCell, vous pouvez implémenter la méthode animée sélectionnée (BOOL) – (void) setSelected: (BOOL) et définir la couleur d’arrière-plan de certaines vues ajoutées dans la vue de contenu. (si tel est le cas) ou de contentView lui-même (s’il n’est pas couvert par l’une de vos propres vues).
- (void)setSelected:(BOOL)selected animated:(BOOL)animated { if(selected) { self.contentView.backgroundColor = UIColor.blueColor; } else { self.contentView.backgroundColor = UIColor.whiteColor; } }
(n’a pas utilisé? pour s’adapter à la petite largeur du code source DIV’s 🙂
Cette approche présente deux avantages par rapport à la méthode selectedBackgroundView: elle utilise moins de mémoire et un peu moins de processeur, mais vous ne remarqueriez même pas si vous n’aurez pas à afficher des centaines de cellules.
Je dois définir le style de sélection sur UITableViewCellSelectionStyleDefault
pour que la couleur d’arrière-plan personnalisée fonctionne. Si un autre style, la couleur d’arrière-plan personnalisée sera ignorée. Testé sur iOS 8.
Le code complet de la cellule comme suit:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSSsortingng *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; }
@IBDesignable class UIDesignableTableViewCell: UITableViewCell { @IBInspectable var selectedColor: UIColor = UIColor.clearColor() { didSet { selectedBackgroundView = UIView() selectedBackgroundView?.backgroundColor = selectedColor } } }
Dans votre storyboard, définissez la classe de votre UITableViewCell sur UIDesignableTableViewCell. Dans l’inspecteur Atsortingbuts, vous pouvez changer la couleur sélectionnée de votre cellule en n’importe quelle couleur.
Vous pouvez l’utiliser pour toutes vos cellules. Voici à quoi ressemblera votre inspecteur d’atsortingbuts.
Swift 3.0 / 4.0
Si vous avez créé votre propre cellule personnalisée, vous pouvez modifier la couleur de sélection sur awakeFromNib()
pour toutes les cellules:
override func awakeFromNib() { super.awakeFromNib() let colorView = UIView() colorView.backgroundColor = UIColor.orange.withAlphaComponent(0.4) self.selectedBackgroundView = colorView }
Basé sur la réponse de l’utilisateur @ , vous pouvez simplement append cette extension n’importe où dans votre code d’application et avoir votre couleur de sélection directement dans l’éditeur de storyboard pour chaque cellule de votre application:
@IBDesignable extension UITableViewCell { @IBInspectable var selectedColor: UIColor? { set { if let color = newValue { selectedBackgroundView = UIView() selectedBackgroundView!.backgroundColor = color } else { selectedBackgroundView = nil } } get { return selectedBackgroundView?.backgroundColor } } }