Як змінити синій колір виділення UITableViewCell?


131

Мені цікаво, як змінити синій колір підсвітки / виділення кольору UITableViewCell, будь-які ідеї?

Відповіді:


213

Можна змінити колір виділення кількома способами.

  1. Змініть властивість selectStyle своєї комірки. Якщо змінити його UITableViewCellSelectionStyleGray, воно стане сірим.

  2. Змініть selectedBackgroundViewвластивість. Насправді те, що створює синій градієнт, - це вид. Ви можете створити подання і намалювати все, що вам подобається, і використовувати подання як фон клітинок перегляду таблиці.


8
круто, знайшов хороше пояснення та приклад тут: cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html
Thomas Joos

1
Я зрозумів, що в IB ви не можете встановити "Selection" для "UITableViewCell" на "None", оскільки selectedBackgroundViewтоді просто звичайна ніколи не з’явиться. Лише після встановлення параметра "Вибір" за замовчуванням selectedBackgroundViewвідображатиметься. Тестовано на iOS 6 та 7.
Jonny

12
Дякую за чудову записку! Це робить його зараз таким простим: ви створюєте новий вид (не потрібно навіть вказувати кадр: cell.selectedBackgroundView = [UIView new];і встановлюєте потрібний колір:cell.selectedBackgroundView.backgroundColor = [UIColor colorWithHex:@"ecf2f5" andAlpha:1];
Dannie P

подивіться внизу цієї сторінки, є більш нові підходи
Climbatize

145

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.


2
Це не надто добре працює при використанні представлень таблиць із розділами. Якщо вибрано, комірка втратить межі і не буде округлена, коли перша чи остання комірка.
Кірк Волл

7
@kirk, ви маєте на увазі згруповані :)
Tieme

@Tieme, ні, я маю на увазі розділи : "Перегляд таблиці складається з нуля або більше розділів, кожен з яких має свої рядки."
Кірк Волл

Ви повинні розмістити його в межах 'cellForRowAtIndexPath'. Для мене добре працює, з одним розділом. Не пробував це з кількох розділів.
Вінсент

Трохи запізнюється на гру, але можу підтвердити, що вона працює в режимі настільного перегляду з кількома розділами (не згруповані)
matto0

30

UITableViewCell має три стилі вибору за замовчуванням: -

  1. Синій
  2. Сірий
  3. Жоден

Реалізація полягає в наступному:

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

     [cell setSelectionStyle:UITableViewCellSelectionStyleNone];       
}

7
замість цих трьох стилів за замовчуванням ми також можемо налаштувати очікуваний стиль за властивістю selectedBackgroundView.
Sunil Targe

Працював для мене ... Дякую тонну.
Mujeeb Farooqi

19

У Swift використовуйте це в cellForRowAtIndexPath

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

Якщо ви хочете, щоб колір вибору був однаковим у всіх UITableViewCell, використовуйте це в AppDelegate.

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

18

Якщо ви хочете змінити це додаток на широкому рівні, ви можете додати логіку до свого делегата додатків

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
}

Ідеально. Будь-яка ідея, як встановити колір тексту цієї клітинки за замовчуванням у всьому світі на select?
BananaAcid

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

Хороший спосіб внести глобальні зміни до UITableViewCell
Shashi3456643

12

для повноти: якщо ви створили свій власний підклас, 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's :)

Цей підхід має дві переваги перед використанням selectedBackgroundView, він використовує менше пам'яті та трохи менше процесора, не те, що ви навіть помітите, якщо ви не відображатимете сотні комірок.


Це спрацьовує лише після того, як новий погляд присвоїть на selectedBackgroundView самому початку методу надбудовиself. selectedBackgroundView = [UIView new];
enadun

@enadun Цей метод працює для мене на iOS 12, без налаштування selectedBackgroundViewвластивості.
Нейт

11

Я повинен встановити стиль вибору, щоб 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;
}

6

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

@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 в раскадровці


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

У своїй дошці розкадровки встановіть клас вашого UITableViewCell на UIDesignableTableViewCell в інспекторі атрибутів, ви можете змінити вибраний колір вашої комірки на будь-який колір.

Ви можете використовувати це для всіх своїх клітин. Ось так виглядатиме ваш інспектор з атрибутів.

Ось так виглядатиме ваш інспектор з атрибутів


Дуже креативно! чудово!
Kaushil Ruparelia

ви можете зробити його ще більш просто, подивіться на мою відповідь;) stackoverflow.com/a/51764804/537694
Climbatize

Я використовую спеціальну комірку для встановлення міток, тому це добре працює, дякую! Зміна для Swift 5: Це зараз UIColor.clear, ні UIColor.clearColor(). Не впевнений, що це і зміни Swift, але це також працює без цього @IBDesignable.
Неф

5

Швидкий 3.0 / 4.0

Якщо ви створили власну власну клітинку, ви можете змінити колір вибору awakeFromNib()для всіх комірок:

 override func awakeFromNib() {
    super.awakeFromNib()

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

    self.selectedBackgroundView = colorView


}

0

1- Додайте представлення до перегляду вмісту вашої клітини.
2- Клацніть правою кнопкою миші свою клітинку.
3- Створіть доданий вид як "вибранийBackgroundView" введіть тут опис зображення

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