// Doesn't work
cell.selectionStyle = .Blue
//Works when the selection is not multiple, if it's multiple with each selection the previous one disappear...
let cellBGView = UIView()
cellBGView.backgroundColor = UIColor(red: 0, green: 0, blue: 200, alpha: 0.4)
cell.selectedBackgroundView = cellBGView
Toute réponse comment définir la couleur de fond des cellules sélectionnées?
Cela a fonctionné pour moi:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
var selectedCell:UITableViewCell = tableView.cellForRowAtIndexPath(indexPath)!
selectedCell.contentView.backgroundColor = UIColor.redColor()
}
// if tableView is set in attribute inspector with selection to multiple Selection it should work.
// Just set it back in deselect
override func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) {
var cellToDeSelect:UITableViewCell = tableView.cellForRowAtIndexPath(indexPath)!
cellToDeSelect.contentView.backgroundColor = colorForCellUnselected
}
//colorForCellUnselected is just a var in my class
Toutes les réponses ci-dessus sont correctes mais un peu complexes à mon goût. La manière la plus simple de le faire est de mettre du code dans la variable cellForRowAtIndexPath
. Ainsi, vous n’aurez plus à vous soucier de changer de couleur lorsque la cellule est désélectionnée.
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)
/* this is where the magic happens, create a UIView and set its
backgroundColor to what ever color you like then set the cell's
selectedBackgroundView to your created View */
let backgroundView = UIView()
backgroundView.backgroundColor = YOUR_COLOR_HERE
cell.selectedBackgroundView = backgroundView
return cell
}
Swift 3
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "yourCellIdentifier", for: indexPath)
cell.selectionStyle = .none
return cell
}
Swift 2
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "yourCellIdentifier", for: indexPath)
cell.selectionStyle = .None
return cell
}
Le problème avec l'approche de Kersnowski est que, lorsque la cellule est redessinée, les modifications apportées lors de la sélection/désélectionnement disparaissent. Je déplacerais donc les modifications dans la cellule elle-même, ce qui signifie qu'un sous-classement est requis ici. Par exemple:
class ICComplaintCategoryCell: UITableViewCell {
@IBOutlet var label_title: UILabel!
@IBOutlet var label_checkmark: UILabel!
override func layoutSubviews() {
super.layoutSubviews()
reload()
}
func reload() {
if isSelected {
contentView.backgroundColor = UIColor.red
}
else if isHighlighted{
contentView.backgroundColor = UIColor.red
}
else {
contentView.backgroundColor = UIColor.white
}
}
}
Et dans votre vue de table, délégué, appelez simplement reload
:
if let cell = self.table.cellForRowAtIndexPath(path) as? ICComplaintCategoryCell {
cell.reload()
}
Mis à jour pour Swift 3+, merci @Bogy
Pour Swift 4, vous pouvez le faire de deux manières.
1) classe: UITableViewCell
override func awakeFromNib() {
super.awakeFromNib()
//Costumize cell
selectionStyle = .none
}
ou
2) tableView cellForRowAt
cell.selectionStyle = .none
Swift 3
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let selectedCell:UITableViewCell = tableView.cellForRow(at: indexPath)!
selectedCell.contentView.backgroundColor = UIColor.darkGray
}
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
let selectedCell:UITableViewCell = tableView.cellForRow(at: indexPath)!
selectedCell.contentView.backgroundColor = UIColor.clear
}
UITableViewCell
a un attribut multipleSelectionBackgroundView
. https://developer.Apple.com/documentation/uikit/uitableviewcell/1623226-selectedbackgroundview
Créez simplement une UIView
définissez le .backgroundColor
de votre choix et affectez-le à votre attribut .multipleSelectionBackgroundView
de cellules.
En ajoutant une vue personnalisée avec la couleur de fond de votre choix, vous pouvez créer un style de sélection personnalisé dans la vue Tableau.
let customBGColorView = UIView()
customBGColorView.backgroundColor = UIColor(hexString: "#FFF900")
cellObj.selectedBackgroundView = customBGColorView
Ajoutez ce code à 3 lignes dans la méthode cellForRowAt de TableView . J'ai utilisé une extension en UIColor pour ajouter de la couleur avec hexcode. Mettez ce code d'extension à la fin de n'importe quelle classe (en dehors du corps de la classe).
extension UIColor {
convenience init(hexString: String) {
let hex = hexString.trimmingCharacters(in: CharacterSet.alphanumerics.inverted)
var int = UInt32()
Scanner(string: hex).scanHexInt32(&int)
let a, r, g, b: UInt32
switch hex.characters.count {
case 3: // RGB (12-bit)
(a, r, g, b) = (255, (int >> 8) * 17, (int >> 4 & 0xF) * 17, (int & 0xF) * 17)
case 6: // RGB (24-bit)
(a, r, g, b) = (255, int >> 16, int >> 8 & 0xFF, int & 0xFF)
case 8: // ARGB (32-bit)
(a, r, g, b) = (int >> 24, int >> 16 & 0xFF, int >> 8 & 0xFF, int & 0xFF)
default:
(a, r, g, b) = (255, 0, 0, 0)
}
self.init(red: CGFloat(r) / 255, green: CGFloat(g) / 255, blue: CGFloat(b) / 255, alpha: CGFloat(a) / 255)
}
}
Swift 4.2
Pour les sélections multiples, vous devez définir la propriété UITableView
allowsMultipleSelection
sur true .
myTableView.allowsMultipleSelection = true
Si vous sous-classez UITableViewCell, vous substituez la méthode setSelected(_ selected: Bool, animated: Bool)
dans votre classe de cellule personnalisée.
override func setSelected(_ selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated) if selected { contentView.backgroundColor = UIColor.green } else { contentView.backgroundColor = UIColor.blue } }
Swift 3/4
Solution pour CustomCell.selectionStyle = .none
si vous définissez un autre style que vous avez vu couleur de fond "mélangée" avec gris ou bleu.
Et n'oublie pas! func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath)
n'a pas appelé quand CustomCell.selectionStyle = .none
.
extension MenuView: UITableViewDelegate {
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let cellType = menuItems[indexPath.row]
let selectedCell = tableView.cellForRow(at: indexPath)!
selectedCell.contentView.backgroundColor = cellType == .none ? .clear : AppDelegate.statusbar?.backgroundColor?.withAlphaComponent(0.15)
menuItemDidTap?(menuItems[indexPath.row])
UIView.animate(withDuration: 0.15) {
selectedCell.contentView.backgroundColor = .clear
}
}
}