Je me demande comment changer la couleur de surbrillance/bleu d'un UITableViewCell
, des idées?
Vous pouvez changer la couleur de surbrillance de plusieurs manières.
Modifiez la propriété selectionStyle de votre cellule. Si vous le changez en UITableViewCellSelectionStyleGray
, il sera gris.
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.
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;
UITableViewCell
selectedBackgroundView
comme étant le UIView
que j'ai créé avec la couleur d'arrière-plan choisieCela a bien fonctionné pour moi. Merci pour le tuyau 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];
}
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
}
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
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.
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;
}
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
}
@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.
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
}
}
}