2010-03-31 3 views

Répondre

200

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

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

  2. Modifier 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 de vos cellules de vue de table.

+8

cool, trouvé une bonne explication et un exemple ici: http: //cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html –

+1

J'ai réalisé que dans IB, vous ne pouvez pas définir le UITableViewCell "Selectio n "à" None "- parce que' selectedBackgroundView' ne s'affichera jamais. Ce n'est qu'après avoir réglé "Sélection" sur "Default" que le "selectedBackgroundView" apparaît. Testé sur iOS 6 et 7. – Jonny

+11

Merci pour la bonne note! Cela le rend si simple maintenant: vous créez une nouvelle vue (pas besoin de spécifier le cadre: 'cell.selectedBackgroundView = [UIView new];' et vous définissez la couleur que vous voulez: 'cell.selectedBackgroundView.backgroundColor = [UIColor colorWithHex : @ "ecf2f5" etAlpha: 1]; ' –

29

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

  1. Bleu
  2. gris
  3. Aucun

La mise en œuvre est la suivante: -

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

    [cell setSelectionStyle:UITableViewCellSelectionStyleNone];  
} 
+7

plutôt que ces trois style par défaut, nous pouvons également personnaliser pour notre style attendu par la propriété selectedBackgroundView –

+0

A travaillé pour moi ... Merci une tonne –

139

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

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

+2

Cela ne fonctionne pas trop bien quand Si vous sélectionnez cette option, la cellule perd les limites et n'est pas arrondie lorsque la première ou la dernière cellule est –

+7

@kirk, vous voulez dire groupé :) – Tieme

+0

@Tieme, non, je veux dire [sections] (http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableView_Class/Reference/Reference.html): "Une vue de table est composée de zéro section ou plus, chacune avec ses propres lignes." –

14

Si vous voulez changer l'application large, vous pouvez ajouter la logique à votre délégué 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 
} 
+0

Parfait. Une idée de comment définir la couleur du texte de cette cellule par défaut globalement sur select? – BananaAcid

+1

cela fonctionne, mais la sélection est effacée directement lorsque vous appuyez sur le nouveau contrôleur de vue. – bobmoff

+0

Belle façon de faire des changements globaux à UITableViewCell – Shashi3456643

7

Je dois définir le style de sélection UITableViewCellSelectionStyleDefault pour la couleur d'arrière-plan personnalisé au travail. Si un autre style est utilisé, la couleur d'arrière-plan personnalisée sera ignorée. Testé sur iOS 8.

Le code complet pour 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

complet: si vous avez créé votre propre sous-classe de UITableViewCell vous pouvez mettre en œuvre le - (void) setSelected: (BOOL) sélectionné animation: (BOOL) méthode animée et définissez la couleur d'arrière-plan de certaines vues que vous avez ajoutées dans la vue du contenu. (Si tel est le cas) ou de la contentView lui-même (si elle ne sont pas couverts par l'un de vos vues.

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

(ne pas utiliser?Cette approche a deux avantages par rapport à l'utilisation de selectedBackgroundView: elle utilise moins de mémoire et moins de CPU, ce que vous ne remarquerez même pas si vous affichez des centaines de cellules.

+0

Ceci fonctionne seulement après qu'une nouvelle vue soit assignée au 'selectedBackgroundView' Au tout début de la méthode, ajoutez 'self. selectedBackgroundView = [UIView new]; ' – enadun

7

Dans Swift, utilisez ceci dans cellForRowAtIndexPath

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

Si vous voulez que votre couleur de sélection soit la même dans tous les UITableViewCell, utiliser dans AppDelegate.

let selectedView = UIView() 
selectedView.backgroundColor = UIColor.white 
UITableViewCell.appearance().selectedBackgroundView = selectedView 
2
@IBDesignable class UIDesignableTableViewCell: UITableViewCell { 
    @IBInspectable var selectedColor: UIColor = UIColor.clearColor() { 
    didSet { 
     selectedBackgroundView = UIView() 
     selectedBackgroundView?.backgroundColor = selectedColor 
    } 
    } 
} 

Dans votre story-board, définissez la classe de votre UITableViewCell à UIDesignableTableViewCell, l'inspecteur Attributs, vous pouvez changer la couleur sélectionnée de votre cellule à une couleur.

Vous pouvez utiliser ceci pour toutes vos cellules. Voici à quoi ressemblera votre inspecteur d'attributs.

This is how your Attributes inspector will look like

+0

Très créatif! génial! –

0

Swift 3,0/4,0

Si vous avez créé votre propre cellule personnalisée, vous pouvez changer 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 


} 
Questions connexes