345 Stimmen

UITableView Zelle ausgewählt Farbe?

Ich habe eine benutzerdefinierte UITableViewCell . In der Tabellenansicht werden die Daten gut angezeigt. Was ich bin in stecken, ist, wenn Benutzer Zelle der tableview berührt, dann möchte ich die Hintergrundfarbe der Zelle andere als die Standardwerte [blaue Farbe] für die Hervorhebung der Auswahl der Zelle zu zeigen. Ich verwende diesen Code, aber nichts passiert:

cell.selectedBackgroundView.backgroundColor=[UIColor blackColor];

9voto

Hemanshu Liya Punkte 601
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    UIView *view = [[UIView alloc] init];
    [view setBackgroundColor:[UIColor redColor]];
    [cell setSelectedBackgroundView:view];
}

In dieser Methode müssen wir die ausgewählte Hintergrundansicht festlegen.

8voto

Javier Flores Font Punkte 2065

Wenn Sie eine benutzerdefinierte hervorgehobene Farbe zu Ihrer Zelle hinzufügen möchten (und Ihre Zelle enthält Schaltflächen, Beschriftungen, Bilder usw.), habe ich die folgenden Schritte befolgt:

Wenn Sie zum Beispiel eine gelbe Farbe auswählen möchten:

1) Erstellen Sie eine Ansicht, die alle Zellen mit einer Deckkraft von 20 % (mit gelber Farbe) anzeigt, z. B. backgroundselectedView

2) Schreiben Sie dies in die Zelle Controller:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
     self.backgroundselectedView.alpha=1;
    [super touchesBegan:touches withEvent:event];
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    self.backgroundselectedView.alpha=0;
    [super touchesEnded:touches withEvent:event];
}

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
    self.backgroundSelectedImage.alpha=0;
    [super touchesCancelled:touches withEvent:event];
}

6voto

Franck Punkte 8337

Wenn Sie eine benutzerdefinierte TableViewCell verwenden, können Sie auch die awakeFromNib :

override func awakeFromNib() {
    super.awakeFromNib()

    // Set background color
    let view = UIView()
    view.backgroundColor = UIColor.redColor()
    selectedBackgroundView = view
}

5voto

18446744073709551615 Punkte 15274

Ich möchte darauf hinweisen, dass der XIB-Editor Ihnen die folgenden Standardoptionen bietet:

Abschnitt: blau/grau/keine

(die rechte Spalte mit Optionen, 4. Registerkarte, erste Gruppe "Tabellenansicht Zelle", 4. Untergruppe, der 1. von 3 Punkten lautet "Auswahl")

Wahrscheinlich können Sie das, was Sie erreichen wollen, durch die Auswahl der richtigen Standardoption erreichen.

5voto

Wonil Punkte 5996

Ein weiterer Tipp zu Christians Methode, abgerundete Ecken als Hintergrund für gruppierte Tabellen anzuzeigen.

Wenn ich die cornerRadius = 10 für Zelle, zeigt es vier Ecken abgerundet Auswahl Hintergrund. Es ist nicht das gleiche mit der Standard-UI der Tabellenansicht.

Ich denke also über eine einfache Lösung mit cornerRadius . Wie Sie aus den folgenden Codes ersehen können, prüfen Sie die Lage der Zelle (oben, unten, in der Mitte oder oben/unten) und fügen Sie eine weitere Unterebene hinzu, um die obere oder untere Ecke auszublenden. Dies zeigt genau das gleiche Aussehen wie der Auswahlhintergrund der Standard-Tabellenansicht.

Ich habe diesen Code mit dem iPad getestet splitterview . Sie können die Rahmenposition des PatchLayers nach Bedarf ändern.

Bitte lassen Sie mich wissen, ob es einen einfacheren Weg gibt, dasselbe Ergebnis zu erzielen.

if (tableView.style == UITableViewStyleGrouped) 
{
    if (indexPath.row == 0) 
    {
        cellPosition = CellGroupPositionAtTop;
    }    
    else 
    {
        cellPosition = CellGroupPositionAtMiddle;
    }

    NSInteger numberOfRows = [tableView numberOfRowsInSection:indexPath.section];
    if (indexPath.row == numberOfRows - 1) 
    {
        if (cellPosition == CellGroupPositionAtTop) 
        {
            cellPosition = CellGroupPositionAtTopAndBottom;
        } 
        else 
        {
            cellPosition = CellGroupPositionAtBottom;
        }
    }

    if (cellPosition != CellGroupPositionAtMiddle) 
    {
        bgColorView.layer.cornerRadius = 10;
        CALayer *patchLayer;
        if (cellPosition == CellGroupPositionAtTop) 
        {
            patchLayer = [CALayer layer];
            patchLayer.frame = CGRectMake(0, 10, 302, 35);
            patchLayer.backgroundColor = YOUR_BACKGROUND_COLOR;
            [bgColorView.layer addSublayer:patchLayer];
        } 
        else if (cellPosition == CellGroupPositionAtBottom) 
        {
            patchLayer = [CALayer layer];
            patchLayer.frame = CGRectMake(0, 0, 302, 35);
            patchLayer.backgroundColor = YOUR_BACKGROUND_COLOR;
            [bgColorView.layer addSublayer:patchLayer];
        }
    }
}

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