改变所选单元格的背景颜色?

有谁知道如何改变使用UITableViewCell单元的背景颜色,为每个选定的单元格吗? 我在TableView的代码中创build了这个UITableViewCell。

更改属性selectedBackgroundView是正确的和最简单的方法。 我使用下面的代码来改变select的颜色:

// set selection color UIView *myBackView = [[UIView alloc] initWithFrame:cell.frame]; myBackView.backgroundColor = [UIColor colorWithRed:1 green:1 blue:0.75 alpha:1]; cell.selectedBackgroundView = myBackView; [myBackView release]; 

我终于设法得到这个工作在风格设置为Grouped的表视图。

首先将所有单元格的selectionStyle属性设置为UITableViewCellSelectionStyleNone

 cell.selectionStyle = UITableViewCellSelectionStyleNone; 

然后在你的表视图委托中实现以下内容:

 static NSColor *SelectedCellBGColor = ...; static NSColor *NotSelectedCellBGColor = ...; - (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath { NSIndexPath *currentSelectedIndexPath = [tableView indexPathForSelectedRow]; if (currentSelectedIndexPath != nil) { [[tableView cellForRowAtIndexPath:currentSelectedIndexPath] setBackgroundColor:NotSelectedCellBGColor]; } return indexPath; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [[tableView cellForRowAtIndexPath:indexPath] setBackgroundColor:SelectedCellBGColor]; } - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { if (cell.isSelected == YES) { [cell setBackgroundColor:SelectedCellBGColor]; } else { [cell setBackgroundColor:NotSelectedCellBGColor]; } } 
 // animate between regular and selected state - (void)setSelected:(BOOL)selected animated:(BOOL)animated { [super setSelected:selected animated:animated]; if (selected) { self.backgroundColor = [UIColor colorWithRed:234.0f/255 green:202.0f/255 blue:255.0f/255 alpha:1.0f]; } else { self.backgroundColor = [UIColor clearColor]; } } 
 -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = (UITableViewCell *)[tableView cellForRowAtIndexPath:indexPath]; cell.contentView.backgroundColor = [UIColor yellowColor]; } 

我创build了UIView并设置了单元格的属性selectedBackgroundView:

 UIView *v = [[UIView alloc] init]; v.backgroundColor = [UIColor redColor]; cell.selectedBackgroundView = v; 

如果您正在讨论选定的单元格,则属性是-selectedBackgroundView 。 这将在用户select你的手机时显示。

我有以下的运气:

 - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { bool isSelected = // enter your own code here if (isSelected) { [cell setBackgroundColor:[UIColor colorWithRed:1 green:1 blue:0.75 alpha:1]]; [cell setAccessibilityTraits:UIAccessibilityTraitSelected]; } else { [cell setBackgroundColor:[UIColor clearColor]]; [cell setAccessibilityTraits:0]; } } 

我有一个高度定制的UITableViewCell。 所以我实现了我自己的小区select。

 cell.selectionStyle = UITableViewCellSelectionStyleNone; 

我在我的单元格的类中创build了一个方法:

 - (void)highlightCell:(BOOL)highlight { if (highlight) { self.contentView.backgroundColor = RGB(0x355881); _bodyLabel.textColor = RGB(0xffffff); _fromLabel.textColor = RGB(0xffffff); _subjectLabel.textColor = RGB(0xffffff); _dateLabel.textColor = RGB(0xffffff); } else { self.contentView.backgroundColor = RGB(0xf7f7f7);; _bodyLabel.textColor = RGB(0xaaaaaa); _fromLabel.textColor = [UIColor blackColor]; _subjectLabel.textColor = [UIColor blackColor]; _dateLabel.textColor = RGB(0x496487); } } 

在ViewWillAppear的我的UITableViewController类中添加了这个:

 NSIndexPath *tableSelection = [self.tableView indexPathForSelectedRow]; SideSwipeTableViewCell *cell = (SideSwipeTableViewCell*)[self.tableView cellForRowAtIndexPath:tableSelection]; [cell highlightCell:NO]; 

在didSelectRow添加了这个:

 SideSwipeTableViewCell *cell = (SideSwipeTableViewCell*)[self.tableView cellForRowAtIndexPath:indexPath]; [cell highlightCell:YES]; 

这与分组调用完美结合:实现UITableViewCell的自定义子类

这将尊重angular落等…

 - (void)setSelected:(BOOL)selected animated:(BOOL)animated { [super setSelected:selected animated:animated]; if(selected) [self setBackgroundColor:[UIColor colorWithRed:(245/255.0) green:(255/255.0) blue:(255/255.0) alpha:1]]; else [self setBackgroundColor:[UIColor whiteColor]]; } 

我能够通过创buildUITableViewCell的子类和实现setSelected:animated:方法来解决这个问题

 - (void)setSelected:(BOOL)selected animated:(BOOL)animated { [super setSelected:selected animated:animated]; // Configure the view for the selected state if(selected) { [self setSelectionStyle:UITableViewCellSelectionStyleNone]; [self setBackgroundColor:[UIColor greenColor]]; } else { [self setBackgroundColor:[UIColor whiteColor]]; } } 

诀窍是设置

 cell.selectionStyle = UITableViewCellSelectionStyleDefault; 

在实现视图控制器中,然后在tableViewCell中将其设置为

 [self setSelectionStyle:UITableViewCellSelectionStyleNone]; 

希望这可以帮助。 🙂

如果你只是想删除灰色的背景色,请执行以下操作:

 -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [[tableView cellForRowAtIndexPath:indexPath] setSelectionStyle:UITableViewCellSelectionStyleNone]; } 

默认样式是灰色的,如果它是以编程方式完成的话,它会破坏单元格的颜色。 你可以这样做,以避免这种情况。 (在Swift中)
cell.selectionStyle = .None

对于iOS7 +,如果您使用的是Interface Builder,那么对您的单元进行子类化并实现:

Objective-C的

 - (void)awakeFromNib { [super awakeFromNib]; // Default Select background UIView *v = [[UIView alloc] init]; v.backgroundColor = [UIColor redColor]; self.selectedBackgroundView = v; } 

Swift 2.2

 override func awakeFromNib() { super.awakeFromNib() // Default Select background self.selectedBackgroundView = { view in view.backgroundColor = .redColor() return view }(UIView()) } 

Swift中

 let v = UIView() v.backgroundColor = self.darkerColor(color) cell?.selectedBackgroundView = v; ... func darkerColor( color: UIColor) -> UIColor { var h = CGFloat(0) var s = CGFloat(0) var b = CGFloat(0) var a = CGFloat(0) let hueObtained = color.getHue(&h, saturation: &s, brightness: &b, alpha: &a) if hueObtained { return UIColor(hue: h, saturation: s, brightness: b * 0.75, alpha: a) } return color } 

查看苹果示例代码中的 AdvancedTableViewCells

你会想要使用复合单元格模式。

创build一个自定义的UITableViewCell。 在你的自定义类中,覆盖“setSelected”函数并更改contentView背景颜色。 你也可以覆盖你“setHighlighted”的function。

在Swift中:

 class myTableViewCell: UITableViewCell { override func awakeFromNib() { super.awakeFromNib() // Initialization code } override func setSelected(selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated) // Configure the view for the selected state // Add your color here self.contentView.backgroundColor = UIColor.whiteColor() } override func setHighlighted(highlighted: Bool, animated: Bool) { // Add your color here self.contentView.backgroundColor = UIColor.whiteColor() } } 

为我工作

 UIView *customColorView = [[UIView alloc] init]; customColorView.backgroundColor = [UIColor colorWithRed:180/255.0 green:138/255.0 blue:171/255.0 alpha:0.5]; cell.selectedBackgroundView = customColorView; 

这是一个在界面生成器(在一个故事板)内完成这个操作的快速方法。 把一个简单的UIView拖到你的UITableView的顶部 的UIView 接下来将你的单元格的selectedBackgroundViewsockets连接到这个视图。 你甚至可以连接多个单元的网点到这一个视图。 细胞的出口

对于通过UITableViewCell的子类化并使用其默认的selectedBackgroundView设置颜色的UIAppearance适用于iOS 7 (和更高版本)的解决scheme(适当地),请看看我在这里回答类似的问题

 - (void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = (UITableViewCell *)[tableView cellForRowAtIndexPath:indexPath]; cell.contentView.backgroundColor = [UIColor yellowColor]; } - (void)tableView:(UITableView *)tableView didUnhighlightRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = (UITableViewCell *)[tableView cellForRowAtIndexPath:indexPath]; cell.contentView.backgroundColor = nil; } 

在Swift 3中,从照亮的答案转换而来。

 override func setSelected(_ selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated) if(selected) { self.selectionStyle = .none self.backgroundColor = UIColor.green } else { self.backgroundColor = UIColor.blue } } 

(但是,只有松开手指才能确认select后视图才会改变)

我已经尝试了以上答案中的每一个,但没有一个最适合我,

那么我已经看到了本地提供的方法之一,它工作正常。

首先,使cellSelectionStyle为None,然后去解决这个问题。

 func tableView(_ tableView: UITableView, willDeselectRowAt indexPath: IndexPath) -> IndexPath? { let cell = tableView.cellForRow(at: indexPath); //cell which is getting deselected, make whatever changes that are required to make it back normal cell.backgroundColor = kNormalColor; return indexPath; } func tableView(_ tableView: UITableView, willSelectRowAt indexPath: IndexPath) -> IndexPath? { let cell = tableView.cellForRow(at: indexPath); //cell which is getting selected, make whatever changes that are required to make it selected cell.backgroundColor = kSelectedColor; return indexPath; } 

这个方法比其他所有的优点是:

  1. 它适用于多个单元格select
  2. 您可以更改任何元素,无论您希望如何,不仅可以选定单元格的背景颜色,还可以取消选定。
 override func setSelected(_ selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated) if selected { self.contentView.backgroundColor = .black } else { self.contentView.backgroundColor = .white } }