Принадлежность UITableViewCell не окрашивается
Я прочитал несколько Q & A по теме, но ни один из них не работает, поэтому вот моя проблема.
Я создал пользовательский UITableViewCell и в Раскадке, я попросил, чтобы там был индикатор индикатора раскрытия. Говорят, что tintColor должен изменить цвет индикатора, но после долгих исследований, вот что я нашел:
- Элемент cellView отображает значение nil, поэтому я не могу повлиять на него tintColor
Я попытался создать аксессуар, как это было сделано с помощью selectedBackgroundView, например:
self.accessoryView = UIView()
Очевидно, что он просто создает пустое пространство, а оригинальное устройство для раскрытия информации исчезает. Я действительно путаюсь со всем этим и не могу найти способ повлиять на цвет аксессуара. Любая помощь будет очень приветствуем!
Ответы
Ответ 1
Вот что помогло мне и помогло другим.
Атрибут tintColor любого типа и подтипов UIView будет распространять его настройку оттенка на subviews в его иерархии. Вы можете установить tintColor для UITableView, и он будет применяться ко всем ячейкам внутри.
Тем не менее, к сожалению, не все типы UITableViewCell Accessory могут быть окрашены.
Те, кто получает оттенок:
- UITableViewCellAccessoryCheckmark
- UITableViewCellAccessoryDetailButton
- UITableViewCellAccessoryDetailDisclosureButton → только подробная часть
Следующие цвета не отображаются:
- UITableViewCellAccessoryDisclosureIndicator
- UITableViewCellAccessoryDetailDisclosureButton → только кнопка Disclosure
Как правило, вы сможете изменить цвет своих UITableViewCell Accessories. Но если вы хотите изменить серо-стрелку, которая обычно указывает на переход к другому виду, никаких шансов, он останется серым.
Единственный способ изменить это - фактически создать пользовательский UIAccessoryView.
Вот одна цель целенаправленно разбита, чтобы ее было ясно.
Хотя я считаю, что существуют лучшие способы:
В моем пользовательском классе UITableViewCell в методе awakeFromNib()
let disclosureImage = UIImage(named: "Disclosure Image")
let disclosureView = UIImageView(image: disclosureImage)
disclosureView.frame = CGRectMake(0, 0, 25, 25)
self.accessoryView = disclosureView
Будьте предупреждены, что это тоже не может быть тонировано. Он будет иметь цвет изображения, используемого по сравнению с "Элементами панели табуляции", поэтому вам может потребоваться несколько изображений для выбранных ячеек и невыбранных.
Ответ 2
Расширение
extension UITableViewCell {
func prepareDisclosureIndicator() {
for case let button as UIButton in subviews {
let image = button.backgroundImageForState(.Normal)?.imageWithRenderingMode(.AlwaysTemplate)
button.setBackgroundImage(image, forState: .Normal)
}
}
}
Swift 3:
extension UITableViewCell {
func prepareDisclosureIndicator() {
for case let button as UIButton in subviews {
let image = button.backgroundImage(for: .normal)?.withRenderingMode(.
alwaysTemplate)
button.setBackgroundImage(image, for: .normal)
}
}
}
Сделайте это
override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
cell.prepareDisclosureIndicator()
}
swift 3:
override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
cell.prepareDisclosureIndicator()
}
Objective-C:
for (UIView *subview in cell.subviews) {
if ([subview isMemberOfClass:[UIButton class]]) {
UIButton *button = (UIButton *)subview;
UIImage *image = [[button backgroundImageForState:UIControlStateNormal] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
[button setBackgroundImage:image forState:UIControlStateNormal];
}
}