#ios
#iOS
Вопрос:
Я пытаюсь реализовать приложение iOS Messages в стиле выбора: все строки имеют галочку слева в режиме редактирования.
Я использую UICollectionView с конфигурацией списка, представленной Apple в iOS 14, и, похоже, реализация множественного выбора изменилась.
Примите Modern Collection Views/Lists/ReorderableListViewController.swift
участие в реализации современных представлений коллекции для exmaple.
Это было то, что я сделал:
- Добавлен следующий код внизу
viewDidLoad
:
navigationItem.setLeftBarButton(editButtonItem, animated: true)
collectionView.allowsMultipleSelection = true
collectionView.allowsMultipleSelectionDuringEditing = true
setEditing
Метод переопределения:
override func setEditing(_ editing: Bool, animated: Bool) {
super.setEditing(editing, animated: true)
self.collectionView.isEditing = editing
}
- Реализовать
UICollectionViewDelegate
:
extension ReorderableListViewController: UICollectionViewDelegate {
func collectionView(_ collectionView: UICollectionView,
shouldBeginMultipleSelectionInteractionAt indexPath: IndexPath) -> Bool {
return true
}
func collectionView(_ collectionView: UICollectionView,
didBeginMultipleSelectionInteractionAt indexPath: IndexPath) {
print(#function)
self.collectionView.isEditing = true
}
}
- Отображать дескриптор изменения порядка только в режиме редактирования (в
configureDataSource
):
cell.accessories = [.disclosureIndicator(), .reorder(displayed:.whenEditing)]
Благодаря этим изменениям я вижу, что дескриптор reoder переключается при нажатии кнопки редактирования. Но слева нет флажка для указания текущих выбранных элементов.
Ответ №1:
Попробуйте сделать это:
collectionView.allowsMultipleSelection = false
cell.accessories = [
.disclosureIndicator(),
.reorder(displayed:.whenEditing),
.multiselect()
]
Галочки будут отображаться в режиме редактирования.
Ответ №2:
Я понял, как это сделать. Используйте пользовательский аксессуар и поместите его в начало.
В configureDataSource
‘s cellRegistration
:
let checkmark = UIImage(systemName: "checkmark.circle.fill")
let checkmarkImageView = UIImageView(image: checkmark)
let checkmarkViewConguration = UICellAccessory.CustomViewConfiguration(
customView: checkmarkImageView,
placement: .leading(displayed: .whenEditing, at: { _ in 0 }))
cell.accessories = [
.customView(configuration: checkmarkViewConguration),
.disclosureIndicator(),
.reorder(displayed:.whenEditing)
]