[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:




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




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



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
}



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



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



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




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



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 .




[cell setSelectionStyle:UITableViewCellSelectionStyleGray];

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




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
}



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




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
}





Links