UITableView Zelle ausgewählt Farbe?


319

Ich habe einen Brauch erstellt UITableViewCell. Die Tabellenansicht zeigt Daten gut. Wenn der Benutzer die Zelle der Tabellenansicht berührt, möchte ich die Hintergrundfarbe der Zelle außer den Standardwerten [blaue Farbe] zum Hervorheben der Zellenauswahl anzeigen. Ich benutze diesen Code, aber nichts passiert:

cell.selectedBackgroundView.backgroundColor=[UIColor blackColor];

Antworten:


365

Ich denke, Sie waren auf dem richtigen Weg, aber gemäß der Klassendefinition für selectedBackgroundView:

Der Standardwert ist null für Zellen in einfachen Tabellen (UITableViewStylePlain) und nicht null für Abschnittsgruppentabellen (UITableViewStyleGrouped).

Wenn Sie eine Tabelle im einfachen Stil verwenden, müssen Sie daher eine neue Tabelle UIViewmit der gewünschten Hintergrundfarbe zuweisen und dieser dann zuweisen selectedBackgroundView.

Alternativ können Sie Folgendes verwenden:

cell.selectionStyle = UITableViewCellSelectionStyleGray;

Wenn Sie bei Auswahl der Zelle nur einen grauen Hintergrund wollten. Hoffe das hilft.


1
Diese Eigenschaft kann auch im Storyboard festgelegt werden, wenn Sie lieber sichtbezogene Inhalte der Ansicht überlassen möchten.
IIllIIll

1
Swift 3 Version: cell.selectionStyle = .gray // Sie können auch .none, .blue oder .default verwenden
Sébastien REMY

6
Diese Antwort ist ziemlich alt ... Wurde in neueren iOS-Versionen etwas geändert? Ich habe eine Tabelle im einfachen Stil und meine selectedBackgroundView ist NICHT Null. Interessanterweise hat das Ändern der Hintergrundfarbe in dieser Ansicht keine Auswirkung. Stattdessen muss ich sie durch eine neue UIView mit meiner gewünschten Hintergrundfarbe ersetzen, damit sie funktioniert.
Ndreisg

Du hast mich nur davor bewahrt, völlig verrückt zu werden. Danke vielmals!
Mrwheet

656

Keine Notwendigkeit für benutzerdefinierte Zellen. Wenn Sie nur die ausgewählte Farbe der Zelle ändern möchten, können Sie dies tun:

Ziel c:

UIView *bgColorView = [[UIView alloc] init];
bgColorView.backgroundColor = [UIColor redColor];
[cell setSelectedBackgroundView:bgColorView];

Schnell:

let bgColorView = UIView()
bgColorView.backgroundColor = UIColor.red
cell.selectedBackgroundView = bgColorView

47
Dies funktioniert, aber in einer gruppierten UITableView gehen die abgerundeten Ecken verloren.
David

1
@ David Funktioniert der CornerRadius = 7 irgendwo in der gruppierten Tabellenansicht? Was ist, wenn sich die Zelle in der Mitte befindet? Ich habe keine Zeit, dies zu testen.
Maciej Swic

2
denn schnell ist ein kleiner Fehler. Die richtige Zeile ist cell.selectedBackgroundView = bgColorView
John Kakon

13
Beachten Sie, dass Sie im Storyboard (oder in der XIB-Datei) eine andere ausgewählte Hintergrundfarbe als Keine auswählen müssen, damit dies funktioniert. Dies steht im Widerspruch zu einigen Antworten, die besagen, dass Sie es zuerst auf Keine setzen müssen, damit es funktioniert. Mit None wird es nicht funktionieren. Hat mich verrückt gemacht, bis ich es herausgefunden habe. Vielen Dank.
Kakubei

1
Wie würden Sie diese Arbeit machen, wenn Sie auch Storyboard verwenden?
John

42

Tabellenansicht Die Hintergrundfarbe für die Zellenauswahl kann über das Storyboard im Interface Builder festgelegt werden:

Tabellenansicht Zellenauswahlfarbe Keine


1
Ich denke, wir können keine benutzerdefinierten Farben aus dem Storyboard festlegen. Müssen Sie es programmatisch einstellen.
Pallavi

37

Wenn Sie eine gruppierte Tabelle mit nur einer Zelle pro Abschnitt haben, fügen Sie einfach diese zusätzliche Zeile zum Code hinzu: bgColorView.layer.cornerRadius = 10;

UIView *bgColorView = [[UIView alloc] init];
[bgColorView setBackgroundColor:[UIColor redColor]];
bgColorView.layer.cornerRadius = 10;
[cell setSelectedBackgroundView:bgColorView];
[bgColorView release]; 

Vergessen Sie nicht, QuartzCore zu importieren.


28

Swift 3: Für mich hat es funktioniert, als Sie es in die cellForRowAtIndexPath:Methode eingefügt haben

let view = UIView()
view.backgroundColor = UIColor.red
cell.selectedBackgroundView = view

6
Ich denke, der bessere Ort, um dies zu setzen, ist die awakeFromNib()Methode (im Fall einer benutzerdefinierten Zelle).
LembergSun

22

Das Folgende funktioniert für mich in iOS 8.

Ich muss den Auswahlstil auf einstellen, damit die UITableViewCellSelectionStyleDefaultbenutzerdefinierte Hintergrundfarbe funktioniert. Bei anderen Stilen wird die benutzerdefinierte Hintergrundfarbe ignoriert. Es scheint eine Änderung des Verhaltens zu geben, da frühere Antworten stattdessen den Stil auf "Keine" setzen müssen.

Der vollständige Code für die Zelle lautet wie folgt:

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

Dieser Code verliert Speicher. Jede "Zuweisung" oder Objekterstellung muss im if (cell == nil) {} -Block erfolgen. Oder die Ansicht wird jedes Mal erstellt, wenn die Zelle von iOS freigegeben wird.
GeneCode

18

Erstellen Sie eine benutzerdefinierte Zelle für Ihre Tabellenzelle und geben Sie in der benutzerdefinierten Zellenklasse.m den folgenden Code ein. Dies funktioniert einwandfrei. Sie müssen das gewünschte Farbbild in selectionBackgroundUIImage platzieren.

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    UIImage *selectionBackground = [UIImage imageNamed:@"yellow_bar.png"];
    UIImageView *iview=[[UIImageView alloc] initWithImage:selectionBackground];
    self.selectedBackgroundView=iview;
}

2
Ich denke, dies könnte speichereffizienter sein als das Festlegen einer selectedBackgroundView beim Initialisieren der Zelle, indem die bg-Ansicht nur erstellt wird, wenn eine Zelle ausgewählt ist.
Dotslashlu

11

Swift 3.0 Erweiterung

extension UITableViewCell {
    var selectionColor: UIColor {
        set {
            let view = UIView()
            view.backgroundColor = newValue
            self.selectedBackgroundView = view
        }
        get {
            return self.selectedBackgroundView?.backgroundColor ?? UIColor.clear
        }
    }
}

cell.selectionColor = UIColor.FormaCar.blue


1
IBDesignable und IBInspectable hinzufügen
Michał Ziobro

1
@ MichałZiobro füge einfach @IBInspectabledie Var hinzu, wenn du willst. @IBDesignableist dafür nicht nützlich.
Nik Kov

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

Wir müssen die ausgewählte Hintergrundansicht in dieser Methode einstellen.


8

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

Zum Beispiel, wenn Sie eine ausgewählte gelbe Farbe wünschen:

1) Erstellen Sie eine Ansicht, die für alle Zellen mit einer Deckkraft von 20% (mit gelber Farbe) geeignet ist, z. B. backgroundselectedView

2) Schreiben Sie in den Zellencontroller Folgendes:

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

8

In Swift 4 können Sie die Hintergrundfarbe Ihrer Tabellenzelle auch global festlegen (von hier aus ):

let backgroundColorView = UIView()
backgroundColorView.backgroundColor = UIColor.red
UITableViewCell.appearance().selectedBackgroundView = backgroundColorView

6

Wenn Sie eine benutzerdefinierte TableViewCell verwenden, können Sie auch Folgendes überschreiben awakeFromNib:

override func awakeFromNib() {
    super.awakeFromNib()

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

1
Schöne Lösung! Vielen Dank
Thomás Calmon

Ich habe eine einfache Tabellenansicht mit nicht mehr als 10 Zellen. Dies funktioniert bisher hervorragend.
Code4latte

5

Ein weiterer Tipp zu Christians Art, den Hintergrund einer abgerundeten Ecke für eine gruppierte Tabelle anzuzeigen.

Wenn ich cornerRadius = 10für Zelle verwende, wird der abgerundete Auswahlhintergrund von vier Ecken angezeigt. Dies ist nicht dasselbe mit der Standardbenutzeroberfläche der Tabellenansicht.

Also denke ich über einen einfachen Weg nach, um es mit CornerRadius zu lösen . Wie Sie den folgenden Codes entnehmen können, überprüfen Sie die Position der Zelle (oben, unten, in der Mitte oder oben) und fügen Sie eine weitere Unterebene hinzu, um die obere oder untere Ecke auszublenden. Dies zeigt genau das gleiche Aussehen mit dem Auswahlhintergrund der Standardtabellenansicht.

Ich habe diesen Code mit dem iPad getestet splitterview. Sie können die Frame-Position von patchLayer nach Bedarf ändern.

Bitte lassen Sie mich wissen, ob es einfacher ist, 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];
        }
    }
}

4

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 "Tabellenansichtszelle", 4. Untergruppe, 1. von 3 Elementen lautet "Auswahl")

Wahrscheinlich können Sie das erreichen, was Sie tun möchten, indem Sie die richtige Standardoption auswählen.


Du hast recht. Wenn Sie dies tun, können Sie die Auswahlfarbe in "cellForRowAtIndexPath" einfach ändern, indem Sie Folgendes hinzufügen: UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier: @ "Cell"]; cell.selectedBackgroundView = [[UIView-Zuweisung] initWithFrame: CGRectZero]; cell.selectedBackgroundView.backgroundColor = [UIColor colorWithRed: (255/255) grün: (0/255) blau: (0/255) alpha: 0,1];
user8675

VIELEN DANK! der Weg zu gehen
Fattie

3

UITableViewGemäß der benutzerdefinierten Farbe für eine ausgewählte Zelle in , eine großartige Lösung gemäß der Antwort von Maciej Swic

Um das noch zu ergänzen, deklarieren Sie Swics Antwort in der Zellenkonfiguration normalerweise unter:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

Für einen zusätzlichen Effekt können Sie anstelle der Systemfarben RGB-Werte für einen benutzerdefinierten Farblook verwenden. In meinem Code habe ich Folgendes erreicht:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

} 

 static NSString *CellIdentifier = @"YourCustomCellName";
 MakanTableCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

// Configure the cell...

if (cell == nil) {

cell = [[[NSBundle mainBundle]loadNibNamed:@"YourCustomCellClassName" owner:self options:nil]objectAtIndex:0];
                    } 

UIView *bgColorView = [[UIView alloc] init];
bgColorView.backgroundColor = [UIColor colorWithRed:255.0/256.0 green:239.0/256.0 blue:49.0/256.0 alpha:1];
bgColorView.layer.cornerRadius = 7;
bgColorView.layer.masksToBounds = YES;
[cell setSelectedBackgroundView:bgColorView];


return cell;

}

Lassen Sie mich wissen, ob das auch bei Ihnen funktioniert. Sie können mit der cornerRadiusNummer für die Effekte an den Ecken der ausgewählten Zelle herumspielen.


3

Ich habe einen etwas anderen Ansatz als alle anderen, der die Auswahl bei Berührung und nicht nach der Auswahl widerspiegelt. Ich habe eine untergeordnete UITableViewCell. Sie müssen lediglich die Hintergrundfarbe in den Berührungsereignissen festlegen, wodurch die Auswahl bei Berührung simuliert wird, und anschließend die Hintergrundfarbe in der Funktion setSelected festlegen. Durch Festlegen der Hintergrundfarbe in der Funktion selSelected können Sie die Auswahl der Zelle aufheben. Stellen Sie sicher, dass das Berührungsereignis an den Super übergeben wird, da sich die Zelle sonst nicht so verhält, als wäre sie ausgewählt.

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    self.backgroundColor = UIColor(white: 0.0, alpha: 0.1)
    super.touchesBegan(touches, withEvent: event)
}

override func touchesCancelled(touches: NSSet!, withEvent event: UIEvent!) {
    self.backgroundColor = UIColor.clearColor()
    super.touchesCancelled(touches, withEvent: event)
}

override func setSelected(selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state
    self.backgroundColor = selected ? UIColor(white: 0.0, alpha: 0.1) : UIColor.clearColor()
}

3

So fügen Sie den Hintergrund für alle Zellen hinzu (unter Verwendung der Antwort von Maciej):

for (int section = 0; section < [self.tableView numberOfSections]; section++) {
        for (int row = 0; row < [self.tableView numberOfRowsInSection:section]; row++) {
            NSIndexPath* cellPath = [NSIndexPath indexPathForRow:row inSection:section];
            UITableViewCell* cell = [self.tableView cellForRowAtIndexPath:cellPath];

            //stuff to do with each cell
            UIView *bgColorView = [[UIView alloc] init];
            bgColorView.backgroundColor = [UIColor redColor];
            [cell setSelectedBackgroundView:bgColorView];
        }
    } 

2

Außer Kraft setzen UITableViewCell‚s setSelectedauch funktioniert.

override func setSelected(selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

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

2

Für diejenigen, die nur den standardmäßig ausgewählten grauen Hintergrund entfernen möchten, fügen Sie diese Codezeile in Ihre cellForRowAtIndexPath-Funktion ein:

yourCell.selectionStyle = .None

1
Vielen Dank, das ist die richtige Antwort für mich, nicht für die anderen.
DeyaEldeen

So stellen Sie eine Farbe wie "Grün" ein, anstatt keine oder Blau oder Grau.
Satyam

2

für Swift 3.0:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let cell = super.tableView(tableView, cellForRowAt: indexPath)

    cell.contentView.backgroundColor = UIColor.red
}

Schön, funktioniert aber erst, nachdem der Benutzer etwas ausgewählt hat (die Standardauswahlfarbe bleibt beim Start)
Konstantin Salavatov

2

Ich benutze unten Ansatz und funktioniert gut für mich,

class MyTableViewCell : UITableViewCell {

                var defaultStateColor:UIColor?
                var hitStateColor:UIColor?

                 override func awakeFromNib(){
                     super.awakeFromNib()
                     self.selectionStyle = .None
                 }

// if you are overriding init you should set selectionStyle = .None

                override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
                    if let hitColor = hitStateColor {
                        self.contentView.backgroundColor = hitColor
                    }
                }

                override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
                    if let defaultColor = defaultStateColor {
                        self.contentView.backgroundColor = defaultColor
                    }
                }

                override func touchesCancelled(touches: Set<UITouch>?, withEvent event: UIEvent?) {
                    if let defaultColor = defaultStateColor {
                        self.contentView.backgroundColor = defaultColor
                    }
                }
            }

2

Swift 4+:

Fügen Sie Ihrer Tabellenzelle die folgenden Zeilen hinzu

let bgColorView = UIView()
bgColorView.backgroundColor =  .red
self.selectedBackgroundView = bgColorView

Schließlich sollte es wie folgt sein

override func setSelected(_ selected: Bool, animated: Bool)
    {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
        let bgColorView = UIView()
        bgColorView.backgroundColor =  .red
        self.selectedBackgroundView = bgColorView

    }

1

Hier sind die wichtigen Teile des Codes, die für eine gruppierte Tabelle benötigt werden. Wenn eine der Zellen in einem Abschnitt ausgewählt ist, ändert die erste Zeile die Farbe. Ohne den Zellenauswahlstil zunächst auf "Keine" zu setzen, erfolgt ein annonierendes doppeltes Neuladen, wenn der Benutzer auf Zeile 0 klickt, wobei die Zelle in "bgColorView" wechselt und dann bgColorView wieder ausblendet und neu lädt. Viel Glück und lassen Sie mich wissen, ob es einen einfacheren Weg gibt, dies zu tun.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    if ([indexPath row] == 0) 
    {
        cell.selectionStyle = UITableViewCellSelectionStyleNone;

        UIView *bgColorView = [[UIView alloc] init];
        bgColorView.layer.cornerRadius = 7;
        bgColorView.layer.masksToBounds = YES;
        [bgColorView setBackgroundColor:[UIColor colorWithRed:.85 green:0 blue:0 alpha:1]];
        [cell setSelectedBackgroundView:bgColorView];

        UIColor *backColor = [UIColor colorWithRed:0 green:0 blue:1 alpha:1];
        cell.backgroundColor = backColor;
        UIColor *foreColor = [UIColor colorWithWhite:1 alpha:1];
        cell.textLabel.textColor = foreColor;

        cell.textLabel.text = @"row0";
    }
    else if ([indexPath row] == 1) 
    {
        cell.selectionStyle = UITableViewCellSelectionStyleNone;

        UIColor *backColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:1];
        cell.backgroundColor = backColor;
        UIColor *foreColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1];
        cell.textLabel.textColor = foreColor;

        cell.textLabel.text = @"row1";
    }
    else if ([indexPath row] == 2) 
    {
        cell.selectionStyle = UITableViewCellSelectionStyleNone;

        UIColor *backColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:1];
        cell.backgroundColor = backColor;
        UIColor *foreColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1];
        cell.textLabel.textColor = foreColor;

        cell.textLabel.text = @"row2";
    }
    return cell;
}

#pragma mark Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSIndexPath *path = [NSIndexPath indexPathForRow:0 inSection:[indexPath section]];
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:path];
    [cell setSelectionStyle:UITableViewCellSelectionStyleBlue];

    [tableView selectRowAtIndexPath:path animated:YES scrollPosition:UITableViewScrollPositionNone];

}

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tvStat cellForRowAtIndexPath:indexPath];
    [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
}

#pragma mark Table view Gestures

-(IBAction)singleTapFrom:(UIGestureRecognizer *)tapRecog
{

    CGPoint tapLoc = [tapRecog locationInView:tvStat];
    NSIndexPath *tapPath = [tvStat indexPathForRowAtPoint:tapLoc];

    NSIndexPath *seleRow = [tvStat indexPathForSelectedRow];
    if([seleRow section] != [tapPath section])
        [self tableView:tvStat didDeselectRowAtIndexPath:seleRow];
    else if (seleRow == nil )
        {}
    else if([seleRow section] == [tapPath section] || [seleRow length] != 0)
        return;

    if(!tapPath)
        [self.view endEditing:YES];

    [self tableView:tvStat didSelectRowAtIndexPath:tapPath];
}

1

Im Fall einer benutzerdefinierten Zellenklasse. Einfach überschreiben:

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state

    if (selected) {
        [self setBackgroundColor: CELL_SELECTED_BG_COLOR];
        [self.contentView setBackgroundColor: CELL_SELECTED_BG_COLOR];
    }else{
        [self setBackgroundColor: [UIColor clearColor]];
        [self.contentView setBackgroundColor: [UIColor clearColor]];
    }
}

0

Es ist einfach, wenn der Stil der Tabellenansicht einfach ist, aber im Gruppenstil ist es ein kleines Problem. Ich löse es durch:

CGFloat cellHeight = [self tableView:tableView heightForRowAtIndexPath:indexPath];
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kGroupTableViewCellWidth+2, cellHeight)];
view.backgroundColor = kCommonHighlightedColor;
cell.selectedBackgroundView = view;
[view release];
UIRectCorner cornerFlag = 0;
CGSize radii = CGSizeMake(0, 0);
NSInteger theLastRow = --> (yourDataSourceArray.count - 1);
if (indexPath.row == 0) {
    cornerFlag = UIRectCornerTopLeft | UIRectCornerTopRight;
    radii = CGSizeMake(10, 10);
} else if (indexPath.row == theLastRow) {
    cornerFlag = UIRectCornerBottomLeft | UIRectCornerBottomRight;
    radii = CGSizeMake(10, 10);
}
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:view.bounds byRoundingCorners:cornerFlag cornerRadii:radii];
CAShapeLayer *shapeLayer = [CAShapeLayer layer];
shapeLayer.path = maskPath.CGPath;
view.layer.mask = shapeLayer;

bemerkte die kGroupTableViewCellWidth, ich definiere es als 300, es ist die Breite der Gruppentabellenansicht Zellenbreite im iPhone


0
[cell setSelectionStyle:UITableViewCellSelectionStyleGray];

Stellen Sie sicher, dass Sie die obige Zeile verwendet haben, um den Auswahleffekt zu verwenden


0
override func setSelected(selected: Bool, animated: Bool) {
    // Configure the view for the selected state

    super.setSelected(selected, animated: animated)
    let selView = UIView()

    selView.backgroundColor = UIColor( red: 5/255, green: 159/255, blue:223/255, alpha: 1.0 )
    self.selectedBackgroundView = selView
}

Bitte fügen Sie eine Erklärung Ihrer Antwort hinzu, um sie für alle zukünftigen Leser lesbar zu machen
techspider

0

Ich verwende iOS 9.3 und das Einstellen der Farbe über das Storyboard oder die Einstellung cell.selectionStylehat bei mir nicht funktioniert, aber der folgende Code hat funktioniert:

UIView *customColorView = [[UIView alloc] init];
customColorView.backgroundColor = [UIColor colorWithRed:55 / 255.0 
                                                  green:141 / 255.0 
                                                   blue:211 / 255.0 
                                                  alpha:1.0];
cell.selectedBackgroundView = customColorView;

return cell;

Ich habe diese Lösung hier gefunden .


0

Versuchen Sie folgenden Code.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:[cellIdArray objectAtIndex:indexPath.row] forIndexPath:indexPath];

    // Configure the cell...
    cell.backgroundView =
    [[UIImageView alloc] init] ;
    cell.selectedBackgroundView =[[UIImageView alloc] init];

    UIImage *rowBackground;
    UIImage *selectionBackground;


    rowBackground = [UIImage imageNamed:@"cellBackgroundDarkGrey.png"];
    selectionBackground = [UIImage imageNamed:@"selectedMenu.png"];

    ((UIImageView *)cell.backgroundView).image = rowBackground;
    ((UIImageView *)cell.selectedBackgroundView).image = selectionBackground;



    return cell;
}

// Schnelle Version:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {


        let cell = tableView.dequeueReusableCell(withIdentifier: "cell")! as UITableViewCell


        cell.selectedBackgroundView = UIImageView()
        cell.backgroundView=UIImageView()

        let selectedBackground : UIImageView = cell.selectedBackgroundView as! UIImageView
        selectedBackground.image = UIImage.init(named:"selected.png");

        let backGround : UIImageView = cell.backgroundView as! UIImageView
        backGround.image = UIImage.init(named:"defaultimage.png");

        return cell


    } 

0

Swift 4.x.

Verwenden Sie die Swift- Erweiterung, um die Auswahlhintergrundfarbe in eine beliebige Farbe zu ändern

Erstellen Sie die UITableView Cell-Erweiterung wie folgt

extension UITableViewCell{

    func removeCellSelectionColour(){
        let clearView = UIView()
        clearView.backgroundColor = UIColor.clear
        UITableViewCell.appearance().selectedBackgroundView = clearView
    } 

}

Rufen Sie dann removeCellSelectionColour () mit der Zelleninstanz auf.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.