Wie ändere ich die blaue Markierungsfarbe einer UITableViewCell?


131

Ich frage mich, wie ich die blaue Markierungs- / Auswahlfarbe von a ändern UITableViewCellkann. Irgendwelche Ideen?

Antworten:


213

Sie können die Hervorhebungsfarbe auf verschiedene Arten ändern.

  1. Ändern Sie die selectionStyle-Eigenschaft Ihrer Zelle. Wenn Sie es ändern UITableViewCellSelectionStyleGray, wird es grau.

  2. Ändern Sie die selectedBackgroundViewEigenschaft. Tatsächlich erzeugt der blaue Farbverlauf eine Ansicht. Sie können eine Ansicht erstellen und zeichnen, was immer Sie möchten, und die Ansicht als Hintergrund für Ihre Tabellenansichtszellen verwenden.


8
cool, fand eine gute Erklärung und ein Beispiel hier: cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html
Thomas Joos

1
Ich habe festgestellt, dass Sie in IB die UITableViewCell "Auswahl" nicht auf "Keine" setzen können - weil selectedBackgroundViewsie dann einfach nie angezeigt wird. Erst nachdem "Auswahl" auf Standard gesetzt wurde, wird das selectedBackgroundViewangezeigt. Getestet auf iOS 6 und 7.
Jonny

12
Danke für den tollen Hinweis! Dies macht es jetzt so einfach: Sie erstellen eine neue Ansicht (Sie müssen nicht einmal den Rahmen angeben: cell.selectedBackgroundView = [UIView new];und Sie legen die gewünschte Farbe fest:cell.selectedBackgroundView.backgroundColor = [UIColor colorWithHex:@"ecf2f5" andAlpha:1];
Dannie P

Schauen Sie am Ende dieser Seite, es gibt neuere Ansätze
Climbatize

145

Zonble hat bereits eine hervorragende Antwort gegeben. Ich dachte, es könnte nützlich sein, ein Kurzcode-Snippet zum Hinzufügen eines UIViewzu der Tabellenansichtszelle hinzuzufügen , das als ausgewählte Hintergrundansicht angezeigt wird.

cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];

    UIView *selectionColor = [[UIView alloc] init];
    selectionColor.backgroundColor = [UIColor colorWithRed:(245/255.0) green:(245/255.0) blue:(245/255.0) alpha:1];
    cell.selectedBackgroundView = selectionColor;
  • Zelle ist meine UITableViewCell
  • Ich habe ein UIView erstellt und seine Hintergrundfarbe mit RGB-Farben (hellgrau) festgelegt.
  • Ich habe dann die Zelle selectedBackgroundViewso eingestellt, UIViewdass sie mit der von mir gewählten Hintergrundfarbe erstellt wurde

Das hat bei mir gut funktioniert. Danke für den Tipp Zonble.


2
Dies funktioniert nicht gut, wenn Tabellenansichten mit Abschnitten verwendet werden. Bei Auswahl dieser Option verliert die Zelle die Ränder und wird bei der ersten oder letzten Zelle nicht gerundet.
Kirk Woll

7
@ Kirk, du meinst gruppiert :)
Tieme

@Tieme, nein, ich meine Abschnitte : "Eine Tabellenansicht besteht aus null oder mehr Abschnitten mit jeweils eigenen Zeilen."
Kirk Woll

Sie müssen es im 'cellForRowAtIndexPath' platzieren. Funktioniert gut für mich, mit einem Abschnitt. Nicht mit mehreren Abschnitten ausprobiert.
Vincent

Ein wenig spät zum Spiel, aber ich kann bestätigen, dass es in einer Tabellenansicht mit mehreren Abschnitten (nicht gruppiert)
funktioniert

30

UITableViewCell hat drei Standardauswahlstile: -

  1. Blau
  2. Grau
  3. Keiner

Die Implementierung ist wie folgt: -

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

     [cell setSelectionStyle:UITableViewCellSelectionStyleNone];       
}

7
Anstelle dieser drei Standardstile können wir den ausgewählten Stil auch über die Eigenschaft selectedBackgroundView anpassen.
Sunil Targe

Arbeitete für mich ... Vielen Dank.
Mujeeb Farooqi

19

Verwenden Sie dies in Swift in cellForRowAtIndexPath

let selectedView = UIView()
selectedView.backgroundColor = .white
cell.selectedBackgroundView = selectedView

Wenn Sie möchten, dass Ihre Auswahlfarbe in allen Farben gleich ist UITableViewCell, verwenden Sie diese in AppDelegate.

let selectedView = UIView()
selectedView.backgroundColor = .white
UITableViewCell.appearance().selectedBackgroundView = selectedView

18

Wenn Sie es App-weit ändern möchten, können Sie die Logik Ihrem App-Delegaten hinzufügen

class AppDelegate: UIResponder, UIApplicationDelegate {

    //... truncated

   func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool {

        // set up your background color view
        let colorView = UIView()
        colorView.backgroundColor = UIColor.yellowColor()

        // use UITableViewCell.appearance() to configure 
        // the default appearance of all UITableViewCells in your app
        UITableViewCell.appearance().selectedBackgroundView = colorView

        return true
    }

    //... truncated
}

Perfekt. Haben Sie eine Idee, wie Sie die Textfarbe dieser Standardzelle bei Auswahl global festlegen können?
BananaAcid

1
Dies funktioniert, aber dann wird die Auswahl direkt gelöscht, wenn der neue Ansichts-Controller gedrückt wird.
Bobmoff

Gute Möglichkeit, globale Änderungen an UITableViewCell vorzunehmen
Shashi3456643

12

Der Vollständigkeit halber: Wenn Sie eine eigene Unterklasse von erstellt haben UITableViewCell, können Sie die - (void)setSelected:(BOOL)selected animated:(BOOL)animatedMethode implementieren und die Hintergrundfarbe einer Ansicht festlegen, die Sie in der Inhaltsansicht hinzugefügt haben. (wenn dies der Fall ist) oder der contentView selbst (wenn sie nicht von einer Ihrer eigenen Ansichten abgedeckt wird.

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    if(selected) {
        self.contentView.backgroundColor = UIColor.blueColor;
    } else {
        self.contentView.backgroundColor = UIColor.whiteColor;
    }
}

(nicht verwendet? um die geringe Breite der Quellcode-DIVs anzupassen :)

Dieser Ansatz hat zwei Vorteile gegenüber der Verwendung von selectedBackgroundView: Er benötigt weniger Speicher und etwas weniger CPU, was Sie nicht einmal bemerken würden, wenn Sie nicht Hunderte von Zellen anzeigen.


Dies funktioniert erst, nachdem eine neue Ansicht selectedBackgroundView dem zu Beginn der Methode addself. selectedBackgroundView = [UIView new];
enadun

@enadun Diese Methode funktioniert für mich unter iOS 12, ohne dass die selectedBackgroundViewEigenschaft festgelegt wurde.
Nate

11

Ich muss den Auswahlstil auf einstellen, damit die UITableViewCellSelectionStyleDefaultbenutzerdefinierte Hintergrundfarbe funktioniert. Bei anderen Stilen wird die benutzerdefinierte Hintergrundfarbe ignoriert. Getestet auf iOS 8.

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

6

Basierend auf der Antwort des @ Benutzers können Sie diese Erweiterung einfach an einer beliebigen Stelle in Ihrem App-Code hinzufügen und Ihre Auswahlfarbe direkt im Storyboard-Editor für jede Zelle Ihrer App festlegen:

@IBDesignable extension 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


5
@IBDesignable class UIDesignableTableViewCell: UITableViewCell {
  @IBInspectable var selectedColor: UIColor = UIColor.clearColor() {
    didSet {
      selectedBackgroundView = UIView()
      selectedBackgroundView?.backgroundColor = selectedColor
    }
  }
}

Setzen Sie in Ihrem Storyboard die Klasse Ihrer UITableViewCell auf UIDesignableTableViewCell. Im Attributinspektor können Sie die ausgewählte Farbe Ihrer Zelle in eine beliebige Farbe ändern.

Sie können dies für alle Ihre Zellen verwenden. So sieht Ihr Attributinspektor aus.

So sieht Ihr Attributinspektor aus


Sehr kreativ! großartig!
Kaushil Ruparelia

Sie können es noch einfacher machen, schauen Sie sich meine Antwort an;) stackoverflow.com/a/51764804/537694
Climbatize

Ich verwende eine benutzerdefinierte Zelle, um Beschriftungen festzulegen. Das funktioniert also gut, danke! Änderung für Swift 5: Es ist jetzt UIColor.clearnicht UIColor.clearColor(). Ich bin mir nicht sicher, ob dies auch eine Änderung in Swift ist, aber es funktioniert auch ohne @IBDesignable.
Neph

5

Swift 3.0 / 4.0

Wenn Sie eine eigene benutzerdefinierte Zelle erstellt haben, können Sie die Auswahlfarbe awakeFromNib()für alle Zellen ändern :

 override func awakeFromNib() {
    super.awakeFromNib()

    let colorView = UIView()
    colorView.backgroundColor = UIColor.orange.withAlphaComponent(0.4)

    self.selectedBackgroundView = colorView


}

0

1- Fügen Sie der Inhaltsansicht Ihrer Zelle eine Ansicht hinzu.
2- Klicken Sie mit der rechten Maustaste auf Ihre Zelle.
3- Machen Sie die hinzugefügte Ansicht als "selectedBackgroundView" Geben Sie hier die Bildbeschreibung ein

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.