Колір UITableView вибраний колір?


319

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

cell.selectedBackgroundView.backgroundColor=[UIColor blackColor];

Відповіді:


365

Я думаю, ви були на правильному шляху, але відповідно до визначення класу для selectedBackgroundView:

За замовчуванням є нуль для комірок у таблицях у простому стилі (UITableViewStylePlain) та ненульове значення для таблиць груп розділів UITableViewStyleGrouped).

Тому, якщо ви використовуєте таблицю в простому стилі, вам потрібно буде виділити новий, який UIViewмає потрібний колір фону, а потім призначити його selectedBackgroundView.

Крім того, ви можете використовувати:

cell.selectionStyle = UITableViewCellSelectionStyleGray;

якщо все, що ви хотіли, - це сірий фон, коли вибрано клітинку. Сподіваюсь, це допомагає.


1
Цю властивість можна також встановити на аркуші розкадрів, якщо ви віддаєте перевагу предметам, пов’язаним із переглядом, для перегляду.
IIllll

1
Версія Swift 3: cell.selectionStyle = .gray // Ви також можете використовувати .none, .blue або .default
Sébastien REMY

6
Ця відповідь досить стара ... Чи змінилось щось в нових версіях iOS? У мене є таблиця в простому стилі, і вибраний намиBackgroundView НЕ нульовий. Цікаво, що зміна backgroundColor на цьому погляді не впливає, замість цього мені доведеться замінити його новим UIView моїм потрібним backgroundColor, щоб він працював.
ndreisg

Ти щойно врятував мене від того, що я зовсім божевільний. Дуже дякую!
mrwheet

656

Немає потреби в користувацьких клітинках. Якщо ви хочете змінити лише вибраний колір комірки, ви можете зробити це:

Завдання-C:

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

Швидкий:

let bgColorView = UIView()
bgColorView.backgroundColor = UIColor.red
cell.selectedBackgroundView = bgColorView

47
Це працює, але в згрупованому UITableView закруглені кути втрачаються.
Девід

1
@David Чи працює кутRadius = 7 в будь-якому місці перегляду згрупованої таблиці? Що робити, якщо клітина знаходиться посередині? Не встигайте це перевірити.
Maciej Swic

2
для стрімких помилок мало. Правильна лінія є cell.selectedBackgroundView = bgColorView
Джон Какон

13
Будьте в курсі, що для цього потрібно у програмі розгортання (або у файлі XIB) вибрати обраний колір тла, відмінний від None. Це суперечить деяким відповідям, у яких йдеться про те, що для його роботи спочатку потрібно встановити значення «Ніхто». Якщо "Ні", це не працюватиме. Зводив мене з розуму, поки я не зрозумів це. Дякую.
kakubei

1
Як би ви зробили цю роботу, коли ви також використовуєте раскадровку?
Іван

42

Колір фонового вибору стільничного виду можна встановити за допомогою Розгортки в Інтерфейсі:

Колір вибору таблиці вибору таблиці Немає


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

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

6
Я думаю, що кращим місцем для цього є awakeFromNib()метод (у випадку індивідуальної комірки).
LembergSun

22

Наступні роботи для мене працюють в iOS 8.

Я повинен встановити стиль вибору, щоб UITableViewCellSelectionStyleDefaultкористувальницький колір фону працював. Якщо будь-який інший стиль, нестандартний колір фону буде ігноровано. Здається, що змінився спосіб поведінки, оскільки попередні відповіді замість цього не повинні встановлювати стиль.

Повний код для комірки наступний:

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

Цей код просочується пам'яттю. Будь-який "аллок" або створення об'єкта повинен бути в блоці if (клітинка == нуль) {}. Або вигляд буде створено щоразу, коли клітина випустить iOS.
GeneCode

18

Створіть спеціальну комірку для комірки таблиці та в користувацький class Cell.m поставте код нижче, це буде добре працювати. Потрібно розмістити потрібне кольорове зображення в 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
Я думаю, що це може бути більш ефективною пам'яттю, ніж встановлення вибраногоBackgroundView при ініціалізації комірки, створюючи лише перегляд 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
Michał Ziobro

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

6

Якщо ви використовуєте користувальницький TableViewCell, ви також можете перекрити awakeFromNib:

override func awakeFromNib() {
    super.awakeFromNib()

    // Set background color
    let view = UIView()
    view.backgroundColor = UIColor.redColor()
    selectedBackgroundView = view
}

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

4

Хочу зазначити, що редактор XIB пропонує вам такі стандартні параметри:

Розділ: синій / сірий / жоден

(правий стовпець з параметрами, 4-а вкладка, перша група "Осередок перегляду таблиці", 4-а підгрупа; 1-й з 3-х пунктів читає "Виділення")

Можливо, того, що ви хочете зробити, можна досягти, вибравши правильний стандартний варіант.


ти маєш рацію. Завдяки цьому, ви можете просто змінити колір вибору у "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

ДЯКУЮ! шлях
Fattie

3

Відповідно до спеціального кольору для вибраної клітинки UITableView, чудове рішення відповідно до відповіді Maciej Swic

Просто щоб додати до цього, ви оголошуєте СВІК в відповідь в конфігурації клітини , як правило , в розділі:

- (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цифрою для ефектів на кути вибраної комірки.


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«S 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
}

2

для тих, хто просто хоче позбутися вибраного за замовчуванням сірого фону, помістіть цей рядок коду у вашій функції cellForRowAtIndexPath:

yourCell.selectionStyle = .None

1
дякую багато, це правильна відповідь для мене, а не для інших.
DeyaEldeen

Як встановити такий колір, як "зелений", замість встановлення жодного або синього або сірого.
Сатьям

2

для Swift 3.0:

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

    cell.contentView.backgroundColor = UIColor.red
}

Приємно, але буде працювати лише після того, як користувач щось вибере (колір вибору за замовчуванням залишиться на старті)
Костянтин Салаватов

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

Swift 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 на жодне, відбувається анонімне подвійне перезавантаження, коли користувач натискає рядок0, де комірка переходить на 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];
}

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

Переконайтеся, що ви використовували вищевказаний рядок, щоб використовувати ефект вибору


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
}

Будь ласка, додайте пояснення своєї відповіді, щоб зробити її читабельною для всіх майбутніх читачів
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;
}

// Швидка версія:

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

Швидкий 4.x

Щоб змінити колір тла вибору на будь-який колір, використовуйте Swift розширення

Створіть розширення UITableView Cell як нижче

extension UITableViewCell{

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

}

Потім викличте RemoveCellSelectionColour () з екземпляром комірки.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.