改变所选单元格的背景颜色?
有谁知道如何改变使用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的顶部 接下来将你的单元格的selectedBackgroundView
sockets连接到这个视图。 你甚至可以连接多个单元的网点到这一个视图。
对于通过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; }
这个方法比其他所有的优点是:
- 它适用于多个单元格select
- 您可以更改任何元素,无论您希望如何,不仅可以选定单元格的背景颜色,还可以取消选定。
override func setSelected(_ selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated) if selected { self.contentView.backgroundColor = .black } else { self.contentView.backgroundColor = .white } }