Je me demande comment changer la couleur de surbrillance / sélection bleue d'un UITableViewCell
, des idées?
Je me demande comment changer la couleur de surbrillance / sélection bleue d'un UITableViewCell
, des idées?
Réponses:
Vous pouvez modifier la couleur de surbrillance de plusieurs manières.
Modifiez la propriété selectionStyle de votre cellule. Si vous le remplacez par UITableViewCellSelectionStyleGray
, il sera gris.
Changez la selectedBackgroundView
propriété. 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 tableau.
selectedBackgroundView
cela n'apparaîtra alors tout simplement jamais. Ce n'est qu'après avoir réglé "Sélection" sur Default, le selectedBackgroundView
show up. Testé sur iOS 6 et 7.
cell.selectedBackgroundView = [UIView new];
et vous définissez la couleur que vous voulez:cell.selectedBackgroundView.backgroundColor = [UIColor colorWithHex:@"ecf2f5" andAlpha:1];
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 de vue du tableau 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;
UITableViewCell
selectedBackgroundView
pour qu'elle soit celle UIView
que j'ai créée avec la couleur de fond choisieCela a bien fonctionné pour moi. Merci pour le conseil Zonble.
UITableViewCell
a 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];
}
Dans Swift, utilisez ceci dans cellForRowAtIndexPath
let selectedView = UIView()
selectedView.backgroundColor = .white
cell.selectedBackgroundView = selectedView
Si vous souhaitez que la couleur de votre sélection soit la même dans tous les domaines UITableViewCell
, utilisez-la dans AppDelegate
.
let selectedView = UIView()
selectedView.backgroundColor = .white
UITableViewCell.appearance().selectedBackgroundView = selectedView
Si vous souhaitez le modifier à l'échelle 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
}
par souci d'exhaustivité: si vous avez créé votre propre sous-classe de, UITableViewCell
vous pouvez implémenter la - (void)setSelected:(BOOL)selected animated:(BOOL)animated
méthode et définir la couleur d'arrière-plan d'une vue que vous avez ajoutée dans la vue de contenu. (si tel est le cas) ou du 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 à l'utilisation de selectedBackgroundView, elle utilise moins de mémoire et un peu moins de CPU, non pas que vous le remarqueriez même à moins d'afficher des centaines de cellules.
selectedBackgroundView
Au tout début de la méthode addself. selectedBackgroundView = [UIView new];
selectedBackgroundView
propriété.
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;
}
En fonction de la réponse de @utilisateur , vous pouvez simplement ajouter cette extension n'importe où dans le code de votre application et avoir la couleur de votre sélection directement dans l'éditeur de storyboard pour toutes les cellules 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
}
}
}
@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 d'attributs, 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'attributs.
UIColor.clear
, non UIColor.clearColor()
. Je ne sais pas si c'est un changement dans Swift aussi, mais cela fonctionne également sans @IBDesignable
.
Swift 3.0 / 4.0
Si vous avez créé votre propre cellule personnalisée, vous pouvez modifier la couleur de sélection awakeFromNib()
pour toutes les cellules:
override func awakeFromNib() {
super.awakeFromNib()
let colorView = UIView()
colorView.backgroundColor = UIColor.orange.withAlphaComponent(0.4)
self.selectedBackgroundView = colorView
}