Отключить выделенный цветом ячейки таблицы в режиме редактирования?
Как убрать выделенный цветом ячейки табличного представления в режиме редактирования. Я использую свойство табличного представления "allowMultipleSelection" в режиме редактирования. По умолчанию ячейка подсвечивается голубым цветом. Хотя мы можем изменить выделенный цвет, я не видел никакой возможности удалить это выделенное свойство цвета. Я хочу, чтобы мой флажок ячейки табличного представления только выбирал и не выделил режим.
"cell.SelectedBackgroundView" позволяет изменить цвет фона ячейки, когда она выбрана, но я хочу иметь только флажок выбора и никакого цвета для ячейки в выбранном состоянии.
Прикрепленное изображение экрана. В моем случае ячейка имеет фоновое изображение, поэтому при выделении я также хочу, чтобы фон ячейки был таким же, и был выбран только флажок.
6 ответов
В вашем классе ячеек переопределите эти методы:
override func setHighlighted(_ highlighted: Bool, animated: Bool) {}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: false)
let viewForHighlight = UIView()
self.selectedBackgroundView = viewForHighlight
if self.isEditing {
viewForHighlight.backgroundColor = UIColor.clear
} else {
viewForHighlight.backgroundColor = UIColor.gray
}
}
UITableViewCell
иметьselectionStyle
свойство выделять ячейку при выделении. Эти стили выделяют ячейку цветом, например:
Синий, серый, по умолчанию (светло-серый), нет
При выборе .none
стиль, это только предотвратит выделение ячейки. Это не будет блокировать выбор. Вы можете увидеть это, применив точку останова в didSelectRowAt indexPath:
функция:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("UITableView Selected")
}
В iOS 14 и выше вы можете просто сделать это в своем
UITableViewCell
подкласс:
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
// Prevent cell highlighting while preserving selectability and separator views
var backgroundConfig = UIBackgroundConfiguration.listPlainCell()
backgroundConfig.backgroundColor = .clear
backgroundConfiguration = backgroundConfig
}
Решение, которое также работает на iOS 13 и ниже, см. /questions/26788987/razdelitelnaya-liniya-uitableview-ischezaet-pri-vyibore-yacheek-v-ios7/56527671#56527671.
Я хотел бы проверить этот метод делегата: tableView (_: shouldHighlightRowAt:). Вы можете проверить, редактируете ли вы и вообще отключить выделение, вернув false в нужных состояниях.
Попробуйте таким образом, я только что проверил, он работает как вам нужно:
func tableView(_ tableView: UITableView, shouldHighlightRowAt indexPath: IndexPath) -> Bool {
let cell = tableView.cellForRow(at: indexPath)
let selectedColor: UIColor
let selectedView = UIView(frame: CGRect.zero)
if tableView.isEditing == true {
selectedColor = .clear
} else {
selectedColor = .lightGray
}
selectedView.backgroundColor = selectedColor
cell?.multipleSelectionBackgroundView = selectedView
return true
}
Еще один вариант - использовать (в Objective-C вы можете сделать нечто подобное в Swift, конечно):
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
}
На основе вашей модели или данных или чего-либо еще, в этом методе вы можете установить или снять флажок в каждой ячейке, а также отключить выделение.
Из документов:
Табличное представление отправляет это сообщение своему делегату непосредственно перед тем, как использовать ячейку для рисования строки, что позволяет делегату настроить объект ячейки перед его отображением. Этот метод дает делегату возможность переопределять основанные на состоянии свойства, установленные ранее табличным представлением, такие как выделение и цвет фона. После возврата делегата табличное представление устанавливает только свойства альфа и фрейма, и только тогда, когда анимация строк происходит по мере их скольжения.
Если вы пытаетесь полностью удалить выделение, вы можете использовать приведенный ниже код
Для Swift 3 cell.selectionStyle = UITableViewCellSelectionStyle.none
Для Swift 4 cell.selectionStyle = .none