Как изменить синий цвет подсветки UITableViewCell?

Мне интересно, как изменить синий цвет выделения/выбора UITableViewCell, любые идеи?

Ответ 1

Вы можете изменить цвет выделения несколькими способами.

  • Измените свойство selectionStyle вашей ячейки. Если вы измените его на UITableViewCellSelectionStyleGray, он будет серым.

  • Измените свойство selectedBackgroundView. Фактически, что создает синий градиент, это вид. Вы можете создать представление и нарисовать все, что захотите, и использовать представление в качестве фона ячеек представления таблицы.

Ответ 2

Zonble уже предоставил отличный ответ. Я подумал, что может быть полезно включить короткий фрагмент кода для добавления UIView в ячейку tableview, которая будет отображаться в качестве выбранного фонового представления.

cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];

    UIView *selectionColor = [[UIView alloc] init];
    selectionColor.backgroundColor = [UIColor colorWithRed:(245/255.0) green:(245/255.0) blue:(245/255.0) alpha:1];
    cell.selectedBackgroundView = selectionColor;
  • ячейка - это мой UITableViewCell
  • Я создал UIView и установил его цвет фона с использованием цветов RGB (светло-серый)
  • Затем я установил ячейку selectedBackgroundView как UIView, которую я создал с выбранным цветом фона

Это сработало для меня. Спасибо за отзыв Zonble.

Ответ 3

UITableViewCell имеет три стиля выбора по умолчанию: -

  • синий
  • Серый
  • None

Реализация выполняется следующим образом: -

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

     [cell setSelectionStyle:UITableViewCellSelectionStyleNone];       
}

Ответ 4

Если вы хотите изменить его в широком приложении, вы можете добавить логику в свой делегат приложения

class AppDelegate: UIResponder, UIApplicationDelegate {

    //... truncated

   func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool {

        // set up your background color view
        let colorView = UIView()
        colorView.backgroundColor = UIColor.yellowColor()

        // use UITableViewCell.appearance() to configure 
        // the default appearance of all UITableViewCells in your app
        UITableViewCell.appearance().selectedBackgroundView = colorView

        return true
    }

    //... truncated
}

Ответ 5

В Swift используйте это в cellForRowAtIndexPath

let selectedView = UIView()
selectedView.backgroundColor = .white
cell.selectedBackgroundView = selectedView

Если вы хотите, чтобы ваш цвет выделения был одинаковым во всех UITableViewCell, используйте это в AppDelegate.

let selectedView = UIView()
selectedView.backgroundColor = .white
UITableViewCell.appearance().selectedBackgroundView = selectedView

Ответ 6

для полноты: если вы создали свой собственный подкласс UITableViewCell вы можете реализовать - (void)setSelected:(BOOL)selected animated:(BOOL)animated метод и установить цвет фона для некоторого представления, добавленного вами в представлении содержимого. (если это так) или самого contentView (если он не охватывается ни одним из ваших собственных представлений).

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    if(selected) {
        self.contentView.backgroundColor = UIColor.blueColor;
    } else {
        self.contentView.backgroundColor = UIColor.whiteColor;
    }
}

(не использовать? чтобы соответствовать небольшой ширине исходного кода DIV :)

у этого подхода есть два преимущества перед использованием selectedBackgroundView, он использует меньше памяти и немного меньше ресурсов процессора, но вы даже не заметите, если не отобразите сотни ячеек.

Ответ 7

Мне нужно установить стиль выделения UITableViewCellSelectionStyleDefault, чтобы пользовательский цвет фона работал. Если какой-либо другой стиль, пользовательский цвет фона будет проигнорирован. Протестировано на iOS 8.

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

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

Ответ 8

Swift 3.0/4.0

Если вы создали свою собственную ячейку, вы можете изменить цвет выделения на awakeFromNib() для всех ячеек:

 override func awakeFromNib() {
    super.awakeFromNib()

    let colorView = UIView()
    colorView.backgroundColor = UIColor.orange.withAlphaComponent(0.4)

    self.selectedBackgroundView = colorView


}

Ответ 9

@IBDesignable class UIDesignableTableViewCell: UITableViewCell {
  @IBInspectable var selectedColor: UIColor = UIColor.clearColor() {
    didSet {
      selectedBackgroundView = UIView()
      selectedBackgroundView?.backgroundColor = selectedColor
    }
  }
}

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

Вы можете использовать это для всех своих ячеек. Вот как выглядит ваш инспектор Attributes.

Вот как ваш инспектор Attributes будет выглядеть так:></a></p></div></body></html>

Ответ 10

Основываясь на ответе @user, вы можете просто добавить это расширение в любом месте кода своего приложения и выбрать цвет непосредственно в редакторе раскадровки для каждой ячейки своего приложения:

@IBDesignable extension UITableViewCell {
    @IBInspectable var selectedColor: UIColor? {
        set {
            if let color = newValue {
                selectedBackgroundView = UIView()
                selectedBackgroundView!.backgroundColor = color
            } else {
                selectedBackgroundView = nil
            }
        }
        get {
            return selectedBackgroundView?.backgroundColor
        }
    }
}

UITableViewCell selection color in storyboard