在 UICollectionView 中完成多项选择后如何呈现 UIAlertController
How to present UIAlertController when finished multiple selection in UICollectionView
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> 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) -> Bool {
collectionView.indexPathsForSelectedItems?.filter({ [=10=].section == indexPath.section }).forEach({ collectionView.deselectItem(at: [=10=], 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 中完成多项选择时显示警报
提前谢谢你:)
你的描述有点单薄所以我guessing/assuming你想要的是那种;用户在每个部分中选择一个项目后,应显示一个警报视图。
要实现这一点,您可以为每个可能的选择设置一个可为 null 的 属性,然后检查是否已设置所有选项。例如想象有
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: { [=13=].section == 0 })?.row else { return }
guard let shiftIndex = collectionView.indexPathsForSelectedItems?.first(where: { [=13=].section == 1 })?.row else { return }
guard let startTimeIndex = collectionView.indexPathsForSelectedItems?.first(where: { [=13=].section == 2 })?.row else { return }
showAlert()
我希望这能让你走上正轨。
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> 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) -> Bool {
collectionView.indexPathsForSelectedItems?.filter({ [=10=].section == indexPath.section }).forEach({ collectionView.deselectItem(at: [=10=], 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 中完成多项选择时显示警报 提前谢谢你:)
你的描述有点单薄所以我guessing/assuming你想要的是那种;用户在每个部分中选择一个项目后,应显示一个警报视图。
要实现这一点,您可以为每个可能的选择设置一个可为 null 的 属性,然后检查是否已设置所有选项。例如想象有
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: { [=13=].section == 0 })?.row else { return }
guard let shiftIndex = collectionView.indexPathsForSelectedItems?.first(where: { [=13=].section == 1 })?.row else { return }
guard let startTimeIndex = collectionView.indexPathsForSelectedItems?.first(where: { [=13=].section == 2 })?.row else { return }
showAlert()
我希望这能让你走上正轨。