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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了更改所选单元格的背景颜色?相关的知识,希望对你有一定的参考价值。

有没有人知道如何使用UITableViewCell为每个选定的单元格更改单元格的背景颜色?我在TableView的代码中创建了这个UITableViewCell。

答案

更改属性selectedBackgroundView是正确的,也是最简单的方法。我使用以下代码更改选择颜色:

// 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];
另一答案

对于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())
}
另一答案

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

这将尊重角落等......

- (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]];

}
另一答案

如果您只想删除灰色背景颜色,请执行以下操作:

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

我能够通过创建UITableViewCell的子类并实现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];

希望这可以帮助。 :)

另一答案

默认样式为灰色,如果以编程方式完成,则会破坏单元格的颜色。你可以这样做以避免这种情况。 (在斯威夫特) cell.selectionStyle = .None

另一答案

在斯威夫特

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
}
另一答案

查看AdvancedTableViewCellsApple's sample code

您将需要使用复合单元格模式。

另一答案

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

(但只有通过释放手指确认选择后视图才会更改)

另一答案

创建自定义UITableViewCell。在您自定义类内部覆盖“setSelected”函数并更改contentView背景颜色。您也可以覆盖“setHighlighted”功能。

在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;
另一答案

我终于设法让这个工作在一个表格视图中,其样式设置为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];
    }
}
另一答案

以下是在Interface Builder(在Storyboard中)中执行此操作的快速方法。将一个简单的UIView拖到UITableView的顶部,如下一步将单元格的selectedBackgroundView Outlet连接到此视图。您甚至可以将多个单元的出口连接到这个视图。

另一答案

对于通过UIAppearance的子类化并使用其默认的UITableViewCell设置颜色(适用于)适用于iOS 7(及更高版本)的selectedBackgroundView的解决方案,请查看我对类似问题here的回答。

另一答案
- (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;
}
另一答案

我在上面的答案中尝试了每一个,但它们都不适合我,

然后我调查了一个本机提供的方法,它工作正常。

首先,将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;

  

以上是关于更改所选单元格的背景颜色?的主要内容,如果未能解决你的问题,请参考以下文章

更改所选 UITableViewCell 的背景颜色

根据内容更改jQuery数据表的单元格背景

更改视图外单元格的背景颜色

如何更改子单元格的单元格背景颜色

更改单元格的背景颜色

使用jQuery更改表格单元格的背景颜色