Как представить UIAlertController после завершения множественного выбора в UICollectionView

#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()  

Я надеюсь, что это выведет вас на правильный путь.