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


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

10 118

10 ответов:

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

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

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

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.

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

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

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

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

     [cell setSelectionStyle:UITableViewCellSelectionStyleNone];       
}

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

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
}

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

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

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

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

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

Я должен установить стиль выбора в 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;
}
@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

Swift 3.0 / 4.0

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

 override func awakeFromNib() {
    super.awakeFromNib()

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

    self.selectedBackgroundView = colorView


}

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

@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