web-dev-qa-db-fra.com

Comment changer la couleur de surbrillance bleue d'un UITableViewCell?

Je me demande comment changer la couleur de surbrillance/bleu d'un UITableViewCell, des idées?

123
Thomas Joos

Vous pouvez changer la couleur de surbrillance de plusieurs manières.

  1. Modifiez la propriété selectionStyle de votre cellule. Si vous le changez en UITableViewCellSelectionStyleGray, il sera gris.

  2. Changez la propriété selectedBackgroundView. En réalité, 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 de vos cellules en vue de tableau.

209
zonble

Zonble a déjà fourni une excellente réponse. J'ai pensé qu'il pourrait être utile d'inclure un court extrait de code pour ajouter un UIView à la cellule tableview qui se présentera comme la 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;
  • la cellule est mon UITableViewCell
  • J'ai créé un UIView et défini sa couleur d'arrière-plan à l'aide de couleurs RVB (gris clair).
  • J'ai ensuite défini la cellule selectedBackgroundView comme étant le UIView que j'ai créé avec la couleur d'arrière-plan choisie

Cela a bien fonctionné pour moi. Merci pour le tuyau Zonble.

143
T Davey

UITableViewCell a trois styles de sélection par défaut: -

  1. Bleu
  2. Gris
  3. None

La mise en œuvre est la suivante: -

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

     [cell setSelectionStyle:UITableViewCellSelectionStyleNone];       
}
30
Arshad Parwez

Si vous souhaitez modifier l'application au niveau de l'application, vous pouvez ajouter 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
}
18
NatashaTheRobot

Dans Swift, utilisez ceci dans cellForRowAtIndexPath

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

Si vous voulez que la couleur de votre sélection soit la même dans chaque UITableViewCell, utilisez ceci dans AppDelegate.

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

pour être complet: si vous avez créé votre propre sous-classe de UITableViewCell, vous pouvez implémenter la méthode - (void)setSelected:(BOOL)selected animated:(BOOL)animated et définir la couleur d'arrière-plan de la vue que vous avez ajoutée à la vue du contenu. (si tel est le cas) ou de contentView lui-même (s'il n'est pas couvert par l'un 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 à selectedBackgroundView, elle utilise moins de mémoire et un peu moins de temps processeur, même si u ne le remarquerait même pas, à moins que vous n'affichiez des centaines de cellules.

11
Martijn Scheffer

Je dois définir le style de sélection sur UITableViewCellSelectionStyleDefault pour que la couleur d'arrière-plan personnalisée fonctionne. S'il s'agit d'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 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;
}
9
samwize

Swift 3.0/4.

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


}
5
Sam Bing
@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 Attributs, vous pouvez modifier 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'attributs.

This is how your Attributes inspector will look like

4
user

Sur la base de réponse de l'utilisateur , vous pouvez simplement ajouter cette extension n'importe où dans le code de votre application et faire colorer votre 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
        }
    }
}

UITableViewCell selection color in storyboard

3
Climbatize