Deaktivieren Sie die Hervorhebung von uitableview, erlauben Sie jedoch die Auswahl einzelner Zellen

83

Wenn Sie auf eine Zelle tippen, wird die Zeile ausgewählt und hervorgehoben. Jetzt möchte ich die Hervorhebung deaktivieren, aber die Auswahl zulassen. Gibt es einen Weg, dies zu umgehen. Es gibt eine Frage, die dies beantwortet, aber sowohl die Auswahl als auch die Hervorhebung deaktiviert.

Soldatshin
quelle
8
cell.selectionStyle = UITableViewCellSelectionStyleNone;Fügen Sie dies in Ihre cellForRowAtIndexPathMethode ein
Shruti

Antworten:

179

Sie können den Auswahlstil der Zelle im Storyboard einfach auf "Keine" setzen:

Siehe hier

Oder aus dem Code:

cell.selectionStyle = UITableViewCellSelectionStyleNone;

Für Swift 3:

cell.selectionStyle = UITableViewCellSelectionStyle.none

Für Swift 4 und höher:

cell.selectionStyle = .none
József Vesza
quelle
Wenn ich "keine" wähle, verliere ich die Fähigkeit, mit hervorgehobenem Zustand zu arbeiten. Kann ich den Hintergrund nicht / weiß machen, ohne diesen Zustand zu verlieren?
Sean
In welche Funktion würde das gehen? Ich vermute "cellForRowAt"?
Daniel Springer
Sie sollten es in der Zelle tun, nicht in der Tabellenansicht
Salem Binmusaed
26

Ändern Sie UITableViewCelldie selectedBackgroundViewFarbe in transparent.

    let clearView = UIView()
    clearView.backgroundColor = UIColor.clearColor() // Whatever color you like
    UITableViewCell.appearance().selectedBackgroundView = clearView

oder für eine bestimmte Zelle festlegen:

cell.backgroundView = clearView

tounaobun
quelle
1
Dies ist die beste Option, da cell.selectionStyle = UITableViewCellSelectionStyleNonemanchmal etwas tief in Apples Animationslogik bricht.
Orkenstein
dann benutze stattdessen ..UITableViewCell.appearance().selectionStyle = .None
Vaibhav
Dies ist hilfreich, wenn Sie auswählbare Elemente in der Zelle haben.
Matthew Korporaal
Hervorragende Lösung. Das Einfügen dieses Codes in die awakeFromNib()Funktion der Zelle ist ein Vergnügen
Dan2899
Mit dieser Option wird die Zellentrennlinie der Tabellenansicht nicht angezeigt.
jonye ._. Jin
8

Versuchen Sie, den Zellenauswahlstil auf Keine zu setzen.

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

Dies wird Ihr Problem lösen

Viper
quelle
8

Für Swift 3.0 :

cell.selectionStyle = .none
Eliko
quelle
6

Für Swift:

UITableViewCell.selectionStyle = UITableViewCellSelectionStyle.None;

Oder wenn Sie eine Zelle schnell unterordnen:

class CustomCell : UITableViewCell {

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)!
        selectionStyle = .None
    }

}
Melvin
quelle
5

in schnell 3

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        tableView.deselectRow(at: indexPath, animated: true)
}
Sai Kumar Reddy
quelle
2

Verwenden Sie den folgenden Code, um eine benutzerdefinierte Farbe hinzuzufügen. Und um es transparent zu machenalpha: 0.0

cell.selectedBackgroundView = UIView(frame: CGRect.zero)
cell.selectedBackgroundView?.backgroundColor = UIColor(red:0.27, green:0.71, blue:0.73, alpha:1.0)

Wenn Sie eine benutzerdefinierte Farbe verwenden und diese mit abgerundeten Ecken versehen möchten, verwenden Sie:

cell.layer.cornerRadius = 8

Verwenden Sie dies auch für eine bessere Animation und ein besseres Gefühl

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    tableView.deselectRow(at: indexPath, animated: true)
}
Prateekro
quelle
1

Für diejenigen, die einen programmatischen Weg in Swift 3 suchen

cell.selectionStyle = UITableViewCellSelectionStyle.none

Danoram
quelle
1

Sie können die Auswahleigenschaft der Zelle selbst im Storyboard festlegen Geben Sie hier die Bildbeschreibung ein

MICH
quelle
0

Für Objc:

[cell setSelectionStyle: UITableViewCellSelectionStyleNone];

- (void)viewDidLoad {
  [super viewDidLoad];
  _tableView.allowsSelection = YES;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    .. .. .. .. 
   [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
   . . . . .. 
}
Lakhdeep Singh
quelle
0

Für Swift 5 ist der beste Weg:

cell.selectionStyle = .none
ramzesenok
quelle
-1

Hier ist die Lösung für Swift 3, funktioniert auch im Bearbeitungsmodus

cell.selectionStyle = .gray
cell.selectedBackgroundView = {

    let colorView = UIView()
    colorView.backgroundColor = UIColor.black.withAlphaComponent(0.0)
    //change the alpha value or color to match with you UI/UX

    return colorView
}()
DukeX
quelle