Ich frage mich, wie ich die blaue Markierungs- / Auswahlfarbe von a ändern UITableViewCell
kann. Irgendwelche Ideen?
Ich frage mich, wie ich die blaue Markierungs- / Auswahlfarbe von a ändern UITableViewCell
kann. Irgendwelche Ideen?
Antworten:
Sie können die Hervorhebungsfarbe auf verschiedene Arten ändern.
Ändern Sie die selectionStyle-Eigenschaft Ihrer Zelle. Wenn Sie es ändern UITableViewCellSelectionStyleGray
, wird es grau.
Ändern Sie die selectedBackgroundView
Eigenschaft. 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.
selectedBackgroundView
sie dann einfach nie angezeigt wird. Erst nachdem "Auswahl" auf Standard gesetzt wurde, wird das selectedBackgroundView
angezeigt. Getestet auf iOS 6 und 7.
cell.selectedBackgroundView = [UIView new];
und Sie legen die gewünschte Farbe fest:cell.selectedBackgroundView.backgroundColor = [UIColor colorWithHex:@"ecf2f5" andAlpha:1];
Zonble hat bereits eine hervorragende Antwort gegeben. Ich dachte, es könnte nützlich sein, ein Kurzcode-Snippet zum Hinzufügen eines UIView
zu 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;
UITableViewCell
selectedBackgroundView
so eingestellt, UIView
dass sie mit der von mir gewählten Hintergrundfarbe erstellt wurdeDas hat bei mir gut funktioniert. Danke für den Tipp Zonble.
UITableViewCell
hat drei Standardauswahlstile: -
Die Implementierung ist wie folgt: -
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *) indexPath {
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
}
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
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
}
Der Vollständigkeit halber: Wenn Sie eine eigene Unterklasse von erstellt haben UITableViewCell
, können Sie die - (void)setSelected:(BOOL)selected animated:(BOOL)animated
Methode 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.
selectedBackgroundView
dem zu Beginn der Methode addself. selectedBackgroundView = [UIView new];
selectedBackgroundView
Eigenschaft festgelegt wurde.
Ich muss den Auswahlstil auf einstellen, damit die UITableViewCellSelectionStyleDefault
benutzerdefinierte 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;
}
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
}
}
}
@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.
UIColor.clear
nicht UIColor.clearColor()
. Ich bin mir nicht sicher, ob dies auch eine Änderung in Swift ist, aber es funktioniert auch ohne @IBDesignable
.
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
}