#ios #swift #uicollectionview
#iOS #быстрый #uicollectionview
Вопрос:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -gt; UICollectionViewCell { guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: ShiftCollectionViewCell.identifier, for: indexPath) as? ShiftCollectionViewCell else { return UICollectionViewCell() } let model = shiftSection[indexPath.section].options[indexPath.row] cell.configure(withModel: OptionsCollectionViewCellViewModel(id: 0, data: model.title)) return cell } func collectionView(_ collectionView: UICollectionView, shouldSelectItemAt indexPath: IndexPath) -gt; Bool { collectionView.indexPathsForSelectedItems?.filter({ $0.section == indexPath.section }).forEach({ collectionView.deselectItem(at: $0, animated: false) }) return true } func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { let model = shiftSection[indexPath.section].options[indexPath.row] print(model.title) if indexPath.section == 2 { showAlert() } }
моя цель-показать предупреждение при завершении множественного выбора в collectionview Заранее спасибо 🙂
Ответ №1:
Ваше описание немного тонковато, поэтому я предполагаю/предполагаю, что вы хотите что-то вроде; После того, как пользователь выберет элемент в каждом разделе, должно отображаться представление предупреждения.
Для достижения этой цели у вас может быть свойство nullable для каждого из возможных вариантов выбора, а затем проверьте, все ли они установлены. Например, представьте, что у вас есть
private var timeMode: TimeMode? private var shift: Shift? private var startTime: StartTime?
теперь didSelectItemAt
вы попытаетесь заполнить эти свойства, такие как:
if indexPath.section == 0 { // TODO: rather use switch statement timeMode = allTimeModes[indexPath.row] } else if indexPath.section == 1 { shift = allShifts[indexPath.row] } ...
затем в конце этого метода (желательно вызвать новый метод) выполните проверку, такую как
guard let timeMode = self.timeMode else { return } guard let shift = self.shift else { return } guard let startTime = self.startTime else { return } showAlert()
Альтернативно
Вы можете использовать свойство представления коллекции indexPathsForSelectedItems
, чтобы определить, что все выбирается аналогичным образом каждый раз, когда пользователь что-то выбирает:
guard let timeModeIndex = collectionView.indexPathsForSelectedItems?.first(where: { $0.section == 0 })?.row else { return } guard let shiftIndex = collectionView.indexPathsForSelectedItems?.first(where: { $0.section == 1 })?.row else { return } guard let startTimeIndex = collectionView.indexPathsForSelectedItems?.first(where: { $0.section == 2 })?.row else { return } showAlert()
Я надеюсь, что это выведет вас на правильный путь.