139 Stimmen

Wie ändert man die blaue Hervorhebungsfarbe einer UITableViewCell?

Ich frage mich, wie man die blaue Hervorhebungs-/Auswahlfarbe einer UITableViewCell ändern kann, irgendwelche Ideen?

13voto

Martijn Scheffer Punkte 655

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.

11voto

samwize Punkte 23381

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;
}

6voto

user Punkte 623
@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:

So wird dein

6voto

Climbatize Punkte 1073

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
        }
    }
}

UITableViewCell-Auswahlfarbe im Storyboard

5voto

Sam Bing Punkte 2665

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

}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X