Изменение цвета фона выбранной ячейки? - PullRequest
48 голосов
/ 10 марта 2010

Кто-нибудь знает, как изменить цвет фона ячейки, используя UITableViewCell, для каждой выбранной ячейки? Я создал этот UITableViewCell внутри кода для TableView.

Ответы [ 25 ]

5 голосов
/ 14 июля 2014

Мне удалось решить эту проблему, создав подкласс UITableViewCell и реализовав setSelected: animated: method

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

Надеюсь, это поможет. :)

5 голосов
/ 27 октября 2013

Если вы хотите просто удалить серый цвет фона, сделайте следующее:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
     [[tableView cellForRowAtIndexPath:indexPath] setSelectionStyle:UITableViewCellSelectionStyleNone];
}     
5 голосов
/ 18 июля 2013

Это прекрасно работало с групповыми вызовами: реализовать пользовательский подкласс 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]];

}
4 голосов
/ 08 сентября 2015

Стиль по умолчанию серый, и он уничтожает цвета ячейки, если это было сделано программно. Вы можете сделать это, чтобы избежать этого. (Свифт)
cell.selectionStyle = .None

3 голосов
/ 20 апреля 2011

Проверьте AdvancedTableViewCells в Пример кода Apple .

Вы захотите использовать шаблон составной ячейки.

3 голосов
/ 15 сентября 2014

In 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
}
3 голосов
/ 05 октября 2016

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

(однако вид меняется только после подтверждения выбора, отпуская палец)

2 голосов
/ 17 мая 2016

у меня работает

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;
2 голосов
/ 15 января 2016

Создайте пользовательский 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()
    }
}
1 голос
/ 25 сентября 2014

Вот быстрый способ сделать это прямо в Интерфейсном Разработчике (в Раскадровке). Перетащите простой UIView в верхнюю часть вашего UITableView, как в UIView Затем подключите selectedBackgroundView выход вашей ячейки к этому представлению. Вы даже можете подключить несколько ячеек к одному представлению. Cell's outlet

...