ios - UIDropInteractionDelegate performDrop 没有被调用?
问题描述
我正在尝试构建一个简单的测试应用程序来学习拖放 API。对于这个问题,我只关注 Drop 场景。我有一个空白的视图控制器,打开了 safari 应用程序(多任务处理),然后我尝试将图像从谷歌拖到视图控制器的视图上。
我可以将图像从 safari 拖到我的应用程序的视图控制器中,但是当我放手时,下面的这个调用永远不会被调用:
func dropInteraction(_ interaction: UIDropInteraction, performDrop session: UIDropSession)
这是我的代码:
class EditTestVC: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
view.addInteraction(UIDropInteraction(delegate: self))
}
}
extension EditTestVC:UIDropInteractionDelegate {
func dropInteraction(_ interaction: UIDropInteraction, canHandle session: UIDropSession) -> Bool { // 1
print("canHandle session: \(session)")
return true
// return session.canLoadObjects(ofClass: UIImage.self)
}
func dropInteraction(_ interaction: UIDropInteraction, sessionDidUpdate session: UIDropSession) -> UIDropProposal { // 2
print("sessionDidUpdate session: \(session)")
return UIDropProposal(operation: .copy)
}
func dropInteraction(_ interaction: UIDropInteraction, performDrop session: UIDropSession) {
print("performDrop session: \(session)")
}
}
调用了前两个方法,这个:
func dropInteraction(_ interaction: UIDropInteraction, canHandle session: UIDropSession) -> Bool
和这个:
func dropInteraction(_ interaction: UIDropInteraction, sessionDidUpdate session: UIDropSession) -> UIDropProposal
所以,我想弄清楚为什么会这样:
func dropInteraction(_ interaction: UIDropInteraction, performDrop session: UIDropSession)
永远不会被调用。
有什么建议吗?
解决方案
就我而言,这是一个编程错误,我写了以下内容:
func dropInteraction(_ interaction: UIDropInteraction, sessionDidUpdate session: UIDropSession) -> UIDropProposal {
return UIDropProposal(operation: .move)
}
但你不能总是使用move
!只要session.allowsMoveOperation
是true
!
从移动文档:
仅当放置会话的 allowMoveOperation 属性为 true 时,您才可以使用此操作;否则,它被视为 UIDropOperation.cancel 操作。[...]
从取消文档中:
如果用户尝试放置活动,则取消拖动操作并且不调用 dropInteraction(_:performDrop:) 委托方法。
推荐阅读
- r - 背面的 knitr 包错误(LaTeX 错误:找不到文件 `knitr.sty')
- python - 映射 - 特征重要性与标签分类
- javascript - 将一个数组项传输到另一个数组时,Javascript 数组推送不起作用?
- codeigniter-4 - 参数 1 传递给 CodeIgniter\Database\BaseResult::getResult()
- maven - Bintray、JCenter、Maven、MavenCentral、OSSRH、Sonatype、Nexus,它们之间有什么关系?
- javascript - 如果数组具有相应值,则为特定单元格着色
- c# - .NET 5 - 防止更新自动增量列?
- selenium - 如何绕过或避免下载消息 - 这种类型的文件可能会损害您的计算机,您要保留此文件吗?使用 webdriverIO
- swift - 为每一行设置 UICollectionViewCell 的自定义空间
- reactjs - wordpress 简码中的 Nextjs 组件