Как изменить синий цвет подсветки UITableViewCell? - PullRequest
121 голосов
/ 31 марта 2010

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

Ответы [ 10 ]

209 голосов
/ 31 марта 2010

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

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

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

143 голосов
/ 26 октября 2012

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

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.

30 голосов
/ 09 октября 2012

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

  1. синий
  2. Серый
  3. нет

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

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

     [cell setSelectionStyle:UITableViewCellSelectionStyleNone];       
}
17 голосов
/ 16 сентября 2014

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

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
}
15 голосов
/ 26 июля 2016

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

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

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

let selectedView = UIView()
selectedView.backgroundColor = .white
UITableViewCell.appearance().selectedBackgroundView = selectedView
11 голосов
/ 14 июня 2015

для полноты: если вы создали свой собственный подкласс 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: он использует меньше памяти и немного меньше ресурсов ЦП, хотя вы даже не заметите, если не отобразите сотни ячеек.

9 голосов
/ 23 апреля 2015

Я должен установить стиль выделения на 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;
}
4 голосов
/ 25 ноября 2017

Swift 3.0 / 4.0

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

 override func awakeFromNib() {
    super.awakeFromNib()

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

    self.selectedBackgroundView = colorView


}
4 голосов
/ 04 августа 2016
@IBDesignable class UIDesignableTableViewCell: UITableViewCell {
  @IBInspectable var selectedColor: UIColor = UIColor.clearColor() {
    didSet {
      selectedBackgroundView = UIView()
      selectedBackgroundView?.backgroundColor = selectedColor
    }
  }
}

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

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

This is how your Attributes inspector will look like

3 голосов
/ 09 августа 2018

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

@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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...