Установка UITableViewCell выбранного цвета фона с UIAppearence не работает - PullRequest
0 голосов
/ 18 октября 2018

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

Тем не менее, установка

let bgColorView = UIView()
bgColorView.backgroundColor = #colorLiteral(red: 0.9411764706, green: 0.9411764706, blue: 0.9411764706, alpha: 1)
UITableViewCell.appearance().selectedBackgroundView = bgColorView

В результате получается странный сбой, когда ячейка теряет цвет выделения., хотя UITableViewCell s все еще выбрано:

UITableViewCell disappearing selection

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

Редактировать : Это происходит со всеми различными ячейками.Ячейки не делают ничего интересного, просто задайте такие вещи, как цвета меток и т. Д. В awakeFromNib и некоторую привязку RxSwift в установщике модели для установки значений различных меток.VC просто реагируют на выбор ячейки, вызывая метод делегата (используя modelSelected из RxSwift).

Edit : VC с UITableView - это "левый"сторона "UISplitViewController.«Правая сторона» - это UINavigationController, и навигация в этом UINavigationController с использованием setViewControllers после нажатия на ячейку вызывает странный сбой.

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Это должно работать идеально, я пытался в приложении для iOS.

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

И проверьтечто свойство выбора UITableViewCell # не установлено в none

enter image description here

0 голосов
/ 18 октября 2018

Так что после некоторых исследований я смог воспроизвести ваш «глюк» :) Я скачал RxSwift и затем попробовал их пример tableView.Я также использую RxSwift, но я не использую их делегаты / расширения источника данных tableView.Я также создал собственный tableViewCell.

После переопределения setSelected метода UITableViewCell и не вызова его супер-метода произошел тот же случай.На самом деле, даже без использования RxSwift, это должно произойти.

Итак, еще раз, убедитесь, что в вашем классе tableView, если вам не нужно ничего делать с setSelected, не переопределяйте его.В противном случае, при переопределении методов суперкласса, убедитесь, что вы вызываете super.method (), точно так же, как вы делаете в viewDidLoad().

override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)
}
вашего контроллера.
...