Ich frage mich, wie man die blaue Hervorhebungs-/Auswahlfarbe einer UITableViewCell
ändern kann, irgendwelche Ideen?
Antworten
Zu viele Anzeigen?Für Vollständigkeit: Wenn Sie Ihre eigene Unterklasse von UITableViewCell
erstellt haben, können Sie die Methode - (void)setSelected:(BOOL)selected animated:(BOOL)animated
implementieren und die Hintergrundfarbe eines bestimmten von Ihnen hinzugefügten Ansicht in der Inhaltsansicht festlegen (falls zutreffend) oder der Inhaltsansicht selbst (falls diese nicht von einer Ihrer eigenen Ansichten verdeckt wird).
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
if(selected) {
self.contentView.backgroundColor = UIColor.blueColor;
} else {
self.contentView.backgroundColor = UIColor.whiteColor;
}
}
(habe kein ? verwendet, um in die kleine Breite der Quellcode-DIVs zu passen :)
Dieser Ansatz hat zwei Vorteile gegenüber der Verwendung von selectedBackgroundView: Er verbraucht weniger Speicher und etwas weniger CPU, obwohl Sie es wahrscheinlich nicht einmal bemerken würden, es sei denn, Sie zeigen Hunderte von Zellen an.
Ich muss den Auswahlstil auf UITableViewCellSelectionStyleDefault
setzen, damit die benutzerdefinierte Hintergrundfarbe funktioniert. Bei einem anderen Stil wird die benutzerdefinierte Hintergrundfarbe ignoriert. Getestet auf iOS 8.
Der vollständige Code für die Zelle lautet:
- (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];
}
// So ändern Sie die Hintergrundfarbe
cell.selectionStyle = UITableViewCellSelectionStyleDefault;
UIView *bgColorView = [[UIView alloc] init];
bgColorView.backgroundColor = [UIColor redColor];
[cell setSelectedBackgroundView:bgColorView];
return cell;
}
@IBDesignable class UIDesignableTableViewCell: UITableViewCell {
@IBInspectable var selectedColor: UIColor = UIColor.clearColor() {
didSet {
selectedBackgroundView = UIView()
selectedBackgroundView?.backgroundColor = selectedColor
}
}
}
In deinem Storyboard setze die Klasse deiner UITableViewCell auf UIDesignableTableViewCell. Im Abschnitt "Attribute" kannst du die Hintergrundfarbe deiner ausgewählten Zelle ändern.
Dies kann für alle deine Zellen verwendet werden. So wird dein "Attribute" Abschnitt aussehen:
Basierend auf @Benutzerantwort, können Sie einfach diese Erweiterung überall in Ihrem App-Code hinzufügen und die Auswahlfarbe direkt im Storyboard-Editor für jede Zelle Ihrer App haben:
@IBDesignable Erweiterung UITableViewCell {
@IBInspectable var selectedColor: UIColor? {
set {
if let color = newValue {
selectedBackgroundView = UIView()
selectedBackgroundView!.backgroundColor = color
} else {
selectedBackgroundView = nil
}
}
get {
return selectedBackgroundView?.backgroundColor
}
}
}
Swift 3.0/4.0
Wenn Sie Ihre eigene benutzerdefinierte Zelle erstellt haben, können Sie die Auswahlfarbe in awakeFromNib()
für alle Zellen ändern:
override func awakeFromNib() {
super.awakeFromNib()
let colorView = UIView()
colorView.backgroundColor = UIColor.orange.withAlphaComponent(0.4)
self.selectedBackgroundView = colorView
}