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

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

Ответы [ 25 ]

1 голос
/ 16 ноября 2017
override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    if selected {
        self.contentView.backgroundColor = .black
    } else {
        self.contentView.backgroundColor = .white
    }
}
1 голос
/ 05 апреля 2016
- (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;
}
1 голос
/ 26 августа 2015

Для решения, которое работает (правильно) с UIAppearance для iOS 7 (и выше?) Путем подкласса UITableViewCell и использования его по умолчанию selectedBackgroundView для установки цвета, посмотрите на мой ответ на похожий вопрос здесь .

0 голосов
/ 16 мая 2019

Swift 3, 4, 5 выберите цвет фона ячейки

1) Изменить только выделенный цвет, когда пользователь нажимает на ячейку:

1.1) Класс внутри ячейки:

override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code

    let backgroundView = UIView()
    backgroundView.backgroundColor = UIColor.init(white: 1.0, alpha: 0.1)
    selectedBackgroundView = backgroundView
}

1.2) Viewcontroller, который вы используете настроенную ячейку

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    tableView.deselectRow(at: indexPath, animated: true)
}

2) Если вы хотите установить цвет для выбранных ячеек:

override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)
    // Configure the view for the selected state

    if selected {
        self.backgroundColor = .darkGray
    } else {
        self.backgroundColor = .white
    }
}
0 голосов
/ 22 ноября 2016

Я попробовал каждый из приведенных выше ответов, но ни один из них мне не подходит,

Затем я посмотрел на один из встроенных методов, и он работает нормально.

сначала сделайте для 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. Работает для выбора нескольких ячеек
  2. Вы можете изменить любой элемент, в зависимости от того, что хотите, не только цвет фона данной ячейки, когда она выделена, но и не выбрана.
...