[Ios] UITableView Zelle ausgewählt Farbe?


Answers

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.redColor()
cell.selectedBackgroundView = bgColorView

Schnell 3:

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

Bearbeiten: Für ARC aktualisiert

Bearbeiten: Fügt Swift 3 hinzu

Question

Ich habe eine benutzerdefinierte UITableViewCell . Die Tabellenansicht zeigt Daten in Ordnung. Was ich feststelle ist, wenn der Benutzer die Zelle von tableview berührt, dann möchte ich die Hintergrundfarbe der Zelle zeigen, die nicht die Standardfarbe [blaue Farbe] ist, um die Auswahl der Zelle hervorzuheben. Ich benutze diesen Code, aber nichts passiert:

cell.selectedBackgroundView.backgroundColor=[UIColor blackColor];



Tabellenansicht Die Hintergrundfarbe der Zellenauswahl kann über das Storyboard eingestellt werden:




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




[cell setSelectionStyle:UITableViewCellSelectionStyleGray];

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




Im Falle einer benutzerdefinierten Zellenklasse. Überschreibe einfach:

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



Verwende [cell setClipsToBounds:YES]; für gruppierte Stilzelle




-(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.




Swift 3: Für mich funktionierte es, wenn du es in die cellForRowAtIndexPath: Methode cellForRowAtIndexPath:

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



Wie die benutzerdefinierte Farbe für eine ausgewählte Zelle in UITableView , großartige Lösung gemäß der answer Maciej Swic

Nur um das hinzuzufügen, deklariert man Swics answer 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 ein benutzerdefiniertes Farb-Layout verwenden. In meinem Code habe ich es so 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 für Sie funktioniert. Sie können mit der cornerRadius Nummer für die Effekte an den Ecken der ausgewählten Zelle cornerRadius .




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

override func awakeFromNib() {
    super.awakeFromNib()

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



Zum Überschreiben von UITableViewCell setSelected funktioniert auch.

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

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



Ich benutze iOS 9.3 und setze die Farbe über das Storyboard oder cell.selectionStyle nicht für mich, aber der Code unten 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 here .




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
}



Um den Hintergrund für alle Zellen hinzuzufügen (mit Maciej's Antwort):

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



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

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