ios - 嵌入 PageViewController 时的 CollectionView 拖放
问题描述
当使用嵌入在 UIPageViewController 中的 UICollectionView 进行拖放didExit
时,分页时委托会立即触发。
- 开始拖放手势
- 页面到新视图
- CollectionDropDelegate 立即触发:
newCV.didEnter
oldCV.didExit
newCV.didExit
newCV.didUpdate
永远不会被调用。如果我们在这一点上放开下降,它就会取消。我的 PageViewController 不是全屏的,所以如果我将拖动移出并移回,我仍然可以在分页后执行拖放,但这是一个糟糕的用户体验。
笔记:
- 不使用 UICollectionViewController
- CollectionView 被添加到 UIViewController 层次结构中
viewDidLoad
有任何想法吗?
解决方案
我能够通过切换来解决这个问题collectionView.isUserInteractionEnabled
。弄清楚在生命周期中的哪个位置执行此操作有点挑战性,最终我最终使用了 UIPageViewControllerDelegatedidFinishAnimating...
所以在我的ContentViewController.viewDidLoad
,我设置collectionView.isUserInteractionEnabled = false
然后在委托中,我需要有条件地启用/禁用集合视图。
func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
if completed {
guard let showing = pageViewController.viewControllers?.first as? DayViewController else {
assertionFailure()
return
}
// Disable All
previousViewControllers.forEach {
if let dayVC = $0 as? DayViewController {
dayVC.collectionView?.isUserInteractionEnabled = false
}
}
// Enable Showing
showing.collectionView?.isUserInteractionEnabled = true
} else {
guard let showing = previousViewControllers.first as? DayViewController else {
assertionFailure()
return
}
// Disable All
viewControllers?.forEach {
if let dayVC = $0 as? DayViewController {
dayVC.collectionView?.isUserInteractionEnabled = false
}
}
// Enable Showing
showing.collectionView?.isUserInteractionEnabled = true
}
}
推荐阅读
- django - 在 Django 项目中意外删除了数据库表。如何重新进行迁移?
- c - 为什么 rand() %max+min 公式在(1000 到 1112)之间没有给出所需的输出?
- java - 问题 Cors:请求的资源上不存在“Access-Control-Allow-Origin”标头
- .net-core - 如何从 Identity 表中获取数据 - AspNetUsers?
- javascript - 我不断收到错误:找不到模块'./config.json/'
- robotframework - Robotframework:pool.apply_async 在 output.xml 中添加“<?xml version=”1.0“ encoding=”UTF-8“?>”)
- java - 平台 java.util.ArrayList
(没有注释)需要显式注册 JsonAdapter android - python - Google Colab 中的光栅通道
- xml - 使用 Ansible 在 xml 属性列表中添加多个值
- reactjs - 尝试在已部署的反应客户端和快速服务器上上传图像文件时出现 503 错误,然后是 CORS 错误