UITableView Ячейка выбрана Цвет?

319

Я создал обычай UITableViewCell. Представление таблицы показывает данные в порядке. Я застреваю в том, что когда пользователь касается ячейки табличного представления, я хочу показать цвет фона ячейки, отличный от значений по умолчанию [синий цвет], чтобы выделить выделение ячейки. Я использую этот код, но ничего не происходит:

cell.selectedBackgroundView.backgroundColor=[UIColor blackColor];
Momi
источник

Ответы:

365

Я думаю, что вы были на правильном пути, но в соответствии с определением класса для selectedBackgroundView:

По умолчанию это nil для ячеек в таблицах простого стиля (UITableViewStylePlain) и не nil для таблиц групп разделов (UITableViewStyleGrouped).

Поэтому, если вы используете таблицу в простом стиле, вам нужно будет выделить-init новую, UIViewимеющую желаемый цвет фона, а затем назначить ее selectedBackgroundView.

В качестве альтернативы вы можете использовать:

cell.selectionStyle = UITableViewCellSelectionStyleGray;

если все, что вам нужно, это серый фон при выделении ячейки. Надеюсь это поможет.

Эндрю Литтл
источник
1
Это свойство также можно установить в раскадровке, если вы предпочитаете оставлять связанные с просмотром вещи для просмотра.
IIllII
1
Версия Swift 3: cell.selectionStyle = .gray // Вы также можете использовать .none, .blue или .default
Sébastien REMY
6
Этот ответ довольно старый ... Что-то изменилось в новых версиях iOS? У меня есть таблица в простом стиле, и мой selectedBackgroundView не ноль. Интересно, что изменение backgroundColor в этом представлении не имеет никакого эффекта, вместо этого я должен заменить его новым UIView с моим желаемым backgroundColor, чтобы заставить его работать.
ndreisg
Вы только что спасли меня от сумасшествия. Большое спасибо!
mrwheet
656

Нет необходимости в пользовательских ячейках. Если вы хотите изменить только выбранный цвет ячейки, вы можете сделать это:

Objective-C:

UIView *bgColorView = [[UIView alloc] init];
bgColorView.backgroundColor = [UIColor redColor];
[cell setSelectedBackgroundView:bgColorView];

Swift:

let bgColorView = UIView()
bgColorView.backgroundColor = UIColor.red
cell.selectedBackgroundView = bgColorView
Maciej Swic
источник
47
Это работает, но в сгруппированном UITableView закругленные углы теряются.
Дэвид
1
@David Работает ли cornerRadius = 7 где-нибудь в сгруппированном табличном представлении? Что если клетка посередине? У меня нет времени, чтобы проверить это.
Maciej Swic
2
Свифт это маленькая ошибка. Правильная строка - cell.selectedBackgroundView = bgColorView
Джон Какон,
13
Имейте в виду, что для этого в раскадровке (или в файле XIB) необходимо выбрать цвет выбранного фона, отличный от «Нет». Это противоречит некоторым ответам, в которых говорится, что сначала нужно установить значение «Нет», чтобы оно работало. С None это не сработает. Сводил меня с ума, пока я не понял это. Спасибо.
Какубей
1
Как бы вы сделали это, когда вы также используете раскадровку?
Джон
42

Табличное представление Цвет фона выбора ячейки может быть установлен через раскадровку в Интерфейсном Разработчике:

Выбор цвета ячейки табличного представления Нет

pkamb
источник
1
Я думаю, что мы не можем установить собственный цвет из раскадровки. Нужно установить его программно.
Паллави
37

Если у вас есть сгруппированная таблица с одной ячейкой на раздел, просто добавьте эту дополнительную строку в код: bgColorView.layer.cornerRadius = 10;

UIView *bgColorView = [[UIView alloc] init];
[bgColorView setBackgroundColor:[UIColor redColor]];
bgColorView.layer.cornerRadius = 10;
[cell setSelectedBackgroundView:bgColorView];
[bgColorView release]; 

Не забудьте импортировать QuartzCore.

Кристиан Фриц
источник
28

Swift 3: для меня это сработало, когда вы положили его в cellForRowAtIndexPath:метод

let view = UIView()
view.backgroundColor = UIColor.red
cell.selectedBackgroundView = view
phitsch
источник
6
Я думаю, что лучшее место, чтобы поставить это awakeFromNib()метод (в случае пользовательской ячейки).
LembergSun
22

Следующее работает для меня в iOS 8.

Я должен установить стиль выбора UITableViewCellSelectionStyleDefault пользовательский цвет фона работал. Если любой другой стиль, пользовательский цвет фона будет игнорироваться. Кажется, что в поведении произошли изменения, поскольку в предыдущих ответах стиль должен быть установлен на none.

Полный код ячейки выглядит следующим образом:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"MyCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    // This is how you change the background color
    cell.selectionStyle = UITableViewCellSelectionStyleDefault;
    UIView *bgColorView = [[UIView alloc] init];
    bgColorView.backgroundColor = [UIColor redColor];
    [cell setSelectedBackgroundView:bgColorView];        
    return cell;
}
samwize
источник
Этот код пропускает память. Любое "alloc" или создание объекта должно быть в блоке if (cell == nil) {}. Или представление будет создаваться каждый раз, когда ячейка выпущена iOS.
GeneCode
18

Создайте пользовательскую ячейку для вашей ячейки таблицы и в коде пользовательской ячейки. Поместите код ниже, он будет работать нормально. Вам нужно поместить желаемое цветное изображение в selectionBackgroundUIImage.

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    UIImage *selectionBackground = [UIImage imageNamed:@"yellow_bar.png"];
    UIImageView *iview=[[UIImageView alloc] initWithImage:selectionBackground];
    self.selectedBackgroundView=iview;
}
Раджеш
источник
2
Я думаю, что это может быть более эффективным с точки зрения памяти, чем установка selectedBackgroundView при инициализации ячейки путем создания только представления bg, когда выбрана одна ячейка.
доцлашлу
11

Расширение Swift 3.0

extension UITableViewCell {
    var selectionColor: UIColor {
        set {
            let view = UIView()
            view.backgroundColor = newValue
            self.selectedBackgroundView = view
        }
        get {
            return self.selectedBackgroundView?.backgroundColor ?? UIColor.clear
        }
    }
}

cell.selectionColor = UIColor.FormaCar.blue

Ник Ков
источник
1
добавить IBDesignable и IBInspectable
Михал Зиобро
1
@ MichałZiobro просто добавь @IBInspectableнад вар, если хочешь. @IBDesignableне полезно для этого.
Ник Ков
9
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    UIView *view = [[UIView alloc] init];
    [view setBackgroundColor:[UIColor redColor]];
    [cell setSelectedBackgroundView:view];
}

Нам нужно установить выбранный фоновый вид в этом методе.

Хеманшу Лия
источник
8

Если вы хотите добавить свой выделенный цвет в свою ячейку (а ваша ячейка содержит кнопки, метки, изображения и т. Д.), Я сделал следующие шаги:

Например, если вы хотите выбрать желтый цвет:

1) Создайте вид, который подходит для всех ячеек с непрозрачностью 20% (с желтым цветом), например, backgroundselectedView

2) В контроллере клетки напишите это:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
     self.backgroundselectedView.alpha=1;
    [super touchesBegan:touches withEvent:event];
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    self.backgroundselectedView.alpha=0;
    [super touchesEnded:touches withEvent:event];
}

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
    self.backgroundSelectedImage.alpha=0;
    [super touchesCancelled:touches withEvent:event];
}
Хавьер Флорес Шрифт
источник
8

В Swift 4 вы также можете установить цвет фона вашей ячейки таблицы глобально (взято отсюда ):

let backgroundColorView = UIView()
backgroundColorView.backgroundColor = UIColor.red
UITableViewCell.appearance().selectedBackgroundView = backgroundColorView
Sundance
источник
6

Если вы используете пользовательский TableViewCell, вы также можете переопределить awakeFromNib:

override func awakeFromNib() {
    super.awakeFromNib()

    // Set background color
    let view = UIView()
    view.backgroundColor = UIColor.redColor()
    selectedBackgroundView = view
}
Franck
источник
1
Отличное решение! Спасибо
Томас Калмон
У меня простое табличное представление с не более чем 10 ячейками, пока это прекрасно работает.
code4latte
5

Еще один совет, как Кристиану показывать фон с закругленными углами для сгруппированной таблицы.

Если я использую cornerRadius = 10для ячейки, он показывает округленный фон четырехугольника. Это не то же самое с пользовательским интерфейсом по умолчанию для табличного представления.

Итак, я думаю о простом способе решить его с помощью cornerRadius . Как видно из приведенных ниже кодов, проверьте расположение ячейки (верхний, нижний, средний или верхний нижний) и добавьте еще один подслой, чтобы скрыть верхний или нижний угол. Это просто показывает точно такой же вид с фоном выбора представления таблицы по умолчанию.

Я проверил этот код с iPad splitterview. Вы можете изменить положение рамки patchLayer, как вам нужно.

Пожалуйста, дайте мне знать, если есть более простой способ достичь того же результата.

if (tableView.style == UITableViewStyleGrouped) 
{
    if (indexPath.row == 0) 
    {
        cellPosition = CellGroupPositionAtTop;
    }    
    else 
    {
        cellPosition = CellGroupPositionAtMiddle;
    }

    NSInteger numberOfRows = [tableView numberOfRowsInSection:indexPath.section];
    if (indexPath.row == numberOfRows - 1) 
    {
        if (cellPosition == CellGroupPositionAtTop) 
        {
            cellPosition = CellGroupPositionAtTopAndBottom;
        } 
        else 
        {
            cellPosition = CellGroupPositionAtBottom;
        }
    }

    if (cellPosition != CellGroupPositionAtMiddle) 
    {
        bgColorView.layer.cornerRadius = 10;
        CALayer *patchLayer;
        if (cellPosition == CellGroupPositionAtTop) 
        {
            patchLayer = [CALayer layer];
            patchLayer.frame = CGRectMake(0, 10, 302, 35);
            patchLayer.backgroundColor = YOUR_BACKGROUND_COLOR;
            [bgColorView.layer addSublayer:patchLayer];
        } 
        else if (cellPosition == CellGroupPositionAtBottom) 
        {
            patchLayer = [CALayer layer];
            patchLayer.frame = CGRectMake(0, 0, 302, 35);
            patchLayer.backgroundColor = YOUR_BACKGROUND_COLOR;
            [bgColorView.layer addSublayer:patchLayer];
        }
    }
}
Wonil
источник
4

Хочу отметить, что редактор XIB предлагает следующие стандартные опции:

Раздел: синий / серый / нет

(правая колонка с опциями, 4-я вкладка, первая группа «Ячейка табличного представления», 4-я подгруппа, 1-й из 3 элементов гласит «Выбор»)

Вероятно, то, что вы хотите сделать, может быть достигнуто путем выбора правильного стандартного варианта.

18446744073709551615
источник
ты прав. Благодаря этому вы можете просто изменить цвет выделения в «cellForRowAtIndexPath», добавив: UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier: @ "Cell"]; cell.selectedBackgroundView = [[UIView alloc] initWithFrame: CGRectZero]; cell.selectedBackgroundView.backgroundColor = [UIColor colorWithRed: (255/255) зеленый: (0/255) синий: (0/255) альфа: 0,1];
user8675
СПАСИБО! путь
Толстяк
3

В соответствии с пользовательским цветом для выбранной ячейки UITableView, отличное решение в соответствии с ответом Maciej Swic

Чтобы добавить к этому, вы объявляете ответ Swic в конфигурации Cell, обычно под:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

А для дополнительного эффекта вместо системных цветов вы можете использовать значения RGB для пользовательского цветового оформления. В моем коде вот как я этого добился:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

} 

 static NSString *CellIdentifier = @"YourCustomCellName";
 MakanTableCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

// Configure the cell...

if (cell == nil) {

cell = [[[NSBundle mainBundle]loadNibNamed:@"YourCustomCellClassName" owner:self options:nil]objectAtIndex:0];
                    } 

UIView *bgColorView = [[UIView alloc] init];
bgColorView.backgroundColor = [UIColor colorWithRed:255.0/256.0 green:239.0/256.0 blue:49.0/256.0 alpha:1];
bgColorView.layer.cornerRadius = 7;
bgColorView.layer.masksToBounds = YES;
[cell setSelectedBackgroundView:bgColorView];


return cell;

}

Дайте мне знать, если это работает и для вас. Вы можете связываться с cornerRadiusномером для эффектов на углах выбранной ячейки.

DrBongo
источник
3

У меня немного другой подход, чем у всех остальных, который отражает выбор на ощупь, а не после того, как его выбрали. У меня есть подкласс UITableViewCell. Все, что вам нужно сделать, это установить цвет фона в сенсорных событиях, который имитирует выбор при касании, а затем установить цвет фона в функции setSelected. Установка цвета фона в функции selSelected позволяет отменить выбор ячейки. Обязательно передайте событие касания супер, иначе ячейка не будет действовать так, как если бы она была выбрана.

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    self.backgroundColor = UIColor(white: 0.0, alpha: 0.1)
    super.touchesBegan(touches, withEvent: event)
}

override func touchesCancelled(touches: NSSet!, withEvent event: UIEvent!) {
    self.backgroundColor = UIColor.clearColor()
    super.touchesCancelled(touches, withEvent: event)
}

override func setSelected(selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state
    self.backgroundColor = selected ? UIColor(white: 0.0, alpha: 0.1) : UIColor.clearColor()
}
Стивен Доннелл
источник
3

Чтобы добавить фон для всех ячеек (используя ответ Maciej):

for (int section = 0; section < [self.tableView numberOfSections]; section++) {
        for (int row = 0; row < [self.tableView numberOfRowsInSection:section]; row++) {
            NSIndexPath* cellPath = [NSIndexPath indexPathForRow:row inSection:section];
            UITableViewCell* cell = [self.tableView cellForRowAtIndexPath:cellPath];

            //stuff to do with each cell
            UIView *bgColorView = [[UIView alloc] init];
            bgColorView.backgroundColor = [UIColor redColor];
            [cell setSelectedBackgroundView:bgColorView];
        }
    } 
Джон
источник
2

Переопределить UITableViewCellэто setSelectedтоже работает.

override func setSelected(selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // Set background color
    let view = UIView()
    view.backgroundColor = UIColor.redColor()
    selectedBackgroundView = view
}
Quanlong
источник
2

для тех, кто просто хочет избавиться от выбранного по умолчанию серого фона, поместите эту строку кода в функцию cellForRowAtIndexPath:

yourCell.selectionStyle = .None
Пол Лен
источник
1
Большое спасибо, это правильный ответ для меня, а не для других.
DeyaEldeen
Как установить цвет как «зеленый» вместо того, чтобы устанавливать ни один или синий или серый.
Satyam
2

для Swift 3.0:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let cell = super.tableView(tableView, cellForRowAt: indexPath)

    cell.contentView.backgroundColor = UIColor.red
}
Wilson
источник
Хорошо, но будет работать только после того, как пользователь выберет что-то (цвет выбора по умолчанию останется при запуске)
Константин Салаватов
2

Я использую подход ниже и работает нормально для меня,

class MyTableViewCell : UITableViewCell {

                var defaultStateColor:UIColor?
                var hitStateColor:UIColor?

                 override func awakeFromNib(){
                     super.awakeFromNib()
                     self.selectionStyle = .None
                 }

// if you are overriding init you should set selectionStyle = .None

                override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
                    if let hitColor = hitStateColor {
                        self.contentView.backgroundColor = hitColor
                    }
                }

                override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
                    if let defaultColor = defaultStateColor {
                        self.contentView.backgroundColor = defaultColor
                    }
                }

                override func touchesCancelled(touches: Set<UITouch>?, withEvent event: UIEvent?) {
                    if let defaultColor = defaultStateColor {
                        self.contentView.backgroundColor = defaultColor
                    }
                }
            }
Сурьявел ТР
источник
2

Свифт 4+:

Добавьте следующие строки в ячейку таблицы

let bgColorView = UIView()
bgColorView.backgroundColor =  .red
self.selectedBackgroundView = bgColorView

Наконец, это должно быть так, как показано ниже

override func setSelected(_ selected: Bool, animated: Bool)
    {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
        let bgColorView = UIView()
        bgColorView.backgroundColor =  .red
        self.selectedBackgroundView = bgColorView

    }
Раджеш Логанатхан
источник
1

Вот важные части кода, необходимые для сгруппированной таблицы. Когда выбрана любая из ячеек в разделе, первая строка меняет цвет. Если исходный параметр cellselectionstyle не установлен равным none, то происходит двойная перезагрузка, когда пользователь щелкает row0, где ячейка меняется на bgColorView, затем исчезает и снова загружает bgColorView. Удачи и дайте мне знать, если есть более простой способ сделать это.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    if ([indexPath row] == 0) 
    {
        cell.selectionStyle = UITableViewCellSelectionStyleNone;

        UIView *bgColorView = [[UIView alloc] init];
        bgColorView.layer.cornerRadius = 7;
        bgColorView.layer.masksToBounds = YES;
        [bgColorView setBackgroundColor:[UIColor colorWithRed:.85 green:0 blue:0 alpha:1]];
        [cell setSelectedBackgroundView:bgColorView];

        UIColor *backColor = [UIColor colorWithRed:0 green:0 blue:1 alpha:1];
        cell.backgroundColor = backColor;
        UIColor *foreColor = [UIColor colorWithWhite:1 alpha:1];
        cell.textLabel.textColor = foreColor;

        cell.textLabel.text = @"row0";
    }
    else if ([indexPath row] == 1) 
    {
        cell.selectionStyle = UITableViewCellSelectionStyleNone;

        UIColor *backColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:1];
        cell.backgroundColor = backColor;
        UIColor *foreColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1];
        cell.textLabel.textColor = foreColor;

        cell.textLabel.text = @"row1";
    }
    else if ([indexPath row] == 2) 
    {
        cell.selectionStyle = UITableViewCellSelectionStyleNone;

        UIColor *backColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:1];
        cell.backgroundColor = backColor;
        UIColor *foreColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1];
        cell.textLabel.textColor = foreColor;

        cell.textLabel.text = @"row2";
    }
    return cell;
}

#pragma mark Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSIndexPath *path = [NSIndexPath indexPathForRow:0 inSection:[indexPath section]];
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:path];
    [cell setSelectionStyle:UITableViewCellSelectionStyleBlue];

    [tableView selectRowAtIndexPath:path animated:YES scrollPosition:UITableViewScrollPositionNone];

}

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tvStat cellForRowAtIndexPath:indexPath];
    [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
}

#pragma mark Table view Gestures

-(IBAction)singleTapFrom:(UIGestureRecognizer *)tapRecog
{

    CGPoint tapLoc = [tapRecog locationInView:tvStat];
    NSIndexPath *tapPath = [tvStat indexPathForRowAtPoint:tapLoc];

    NSIndexPath *seleRow = [tvStat indexPathForSelectedRow];
    if([seleRow section] != [tapPath section])
        [self tableView:tvStat didDeselectRowAtIndexPath:seleRow];
    else if (seleRow == nil )
        {}
    else if([seleRow section] == [tapPath section] || [seleRow length] != 0)
        return;

    if(!tapPath)
        [self.view endEditing:YES];

    [self tableView:tvStat didSelectRowAtIndexPath:tapPath];
}
firescar96
источник
1

В случае пользовательского класса ячейки. Просто переопределите:

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state

    if (selected) {
        [self setBackgroundColor: CELL_SELECTED_BG_COLOR];
        [self.contentView setBackgroundColor: CELL_SELECTED_BG_COLOR];
    }else{
        [self setBackgroundColor: [UIColor clearColor]];
        [self.contentView setBackgroundColor: [UIColor clearColor]];
    }
}
Лал Кришна
источник
0

Легко, когда стиль табличного представления прост, но в групповом стиле это небольшая проблема, я решаю это следующим образом:

CGFloat cellHeight = [self tableView:tableView heightForRowAtIndexPath:indexPath];
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kGroupTableViewCellWidth+2, cellHeight)];
view.backgroundColor = kCommonHighlightedColor;
cell.selectedBackgroundView = view;
[view release];
UIRectCorner cornerFlag = 0;
CGSize radii = CGSizeMake(0, 0);
NSInteger theLastRow = --> (yourDataSourceArray.count - 1);
if (indexPath.row == 0) {
    cornerFlag = UIRectCornerTopLeft | UIRectCornerTopRight;
    radii = CGSizeMake(10, 10);
} else if (indexPath.row == theLastRow) {
    cornerFlag = UIRectCornerBottomLeft | UIRectCornerBottomRight;
    radii = CGSizeMake(10, 10);
}
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:view.bounds byRoundingCorners:cornerFlag cornerRadii:radii];
CAShapeLayer *shapeLayer = [CAShapeLayer layer];
shapeLayer.path = maskPath.CGPath;
view.layer.mask = shapeLayer;

отметил kGroupTableViewCellWidth, я определяю его как 300, это ширина ширины ячейки представления таблицы группы в iPhone

勇敢 的 心
источник
0
[cell setSelectionStyle:UITableViewCellSelectionStyleGray];

Убедитесь, что вы использовали вышеуказанную строку, чтобы использовать эффект выбора

Tushar
источник
0
override func setSelected(selected: Bool, animated: Bool) {
    // Configure the view for the selected state

    super.setSelected(selected, animated: animated)
    let selView = UIView()

    selView.backgroundColor = UIColor( red: 5/255, green: 159/255, blue:223/255, alpha: 1.0 )
    self.selectedBackgroundView = selView
}
Ranjan
источник
Пожалуйста, добавьте пояснения к своему ответу, чтобы сделать его читаемым для всех будущих читателей
techspider
0

Я использую iOS 9.3 и настройка цвета через раскадровку или настройка cell.selectionStyleне работает для меня, но код ниже работал:

UIView *customColorView = [[UIView alloc] init];
customColorView.backgroundColor = [UIColor colorWithRed:55 / 255.0 
                                                  green:141 / 255.0 
                                                   blue:211 / 255.0 
                                                  alpha:1.0];
cell.selectedBackgroundView = customColorView;

return cell;

Я нашел это решение здесь .

Фелипе Андраде
источник
0

Попробуйте следующий код.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:[cellIdArray objectAtIndex:indexPath.row] forIndexPath:indexPath];

    // Configure the cell...
    cell.backgroundView =
    [[UIImageView alloc] init] ;
    cell.selectedBackgroundView =[[UIImageView alloc] init];

    UIImage *rowBackground;
    UIImage *selectionBackground;


    rowBackground = [UIImage imageNamed:@"cellBackgroundDarkGrey.png"];
    selectionBackground = [UIImage imageNamed:@"selectedMenu.png"];

    ((UIImageView *)cell.backgroundView).image = rowBackground;
    ((UIImageView *)cell.selectedBackgroundView).image = selectionBackground;



    return cell;
}

// Swift Version:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {


        let cell = tableView.dequeueReusableCell(withIdentifier: "cell")! as UITableViewCell


        cell.selectedBackgroundView = UIImageView()
        cell.backgroundView=UIImageView()

        let selectedBackground : UIImageView = cell.selectedBackgroundView as! UIImageView
        selectedBackground.image = UIImage.init(named:"selected.png");

        let backGround : UIImageView = cell.backgroundView as! UIImageView
        backGround.image = UIImage.init(named:"defaultimage.png");

        return cell


    } 
Авижит Нагаре
источник
0

Swift 4.x

Для изменения цвета фона выделения на любой цвет используйте расширение Swift.

Создайте расширение ячейки UITableView, как показано ниже

extension UITableViewCell{

    func removeCellSelectionColour(){
        let clearView = UIView()
        clearView.backgroundColor = UIColor.clear
        UITableViewCell.appearance().selectedBackgroundView = clearView
    } 

}

Затем вызовите removeCellSelectionColour () с экземпляром ячейки.

iSrinivasan27
источник