从集合视图中拖动单元格可在iPad模拟器上工作,但不能在iPhone模拟器或Swift 4中的真实设备上使用
问题描述:
我在swift 4中使用新的拖放API。我需要通过长时间拖动单元格并拖放视图控制器视图上的图像。这是拖放在同一个应用程序,因为它需要在iPhone上工作,并且此功能只能在同一应用程序的手机上工作。我用一个真正的设备来测试我写的东西,而且我无法弄清楚为什么一旦我使用它就不能拖动一个单元格。但在iPad上运行模拟器,...它的工作原理,我可以拖动它。我已经浏览了苹果的文档,他们指定拖动项目的外观可以在拖动过程中配置,但默认情况下,如果没有自定义实现委托函数或返回nil,则会拖动整个单元格;所以它应该仍然可以工作,它可以在iPad上的模拟器中进行,但不会在模拟iPhone或真正的iPhone上进行。代码如下。也许有人已经过去了,知道如何帮助我。谢谢。 只有相关位:从集合视图中拖动单元格可在iPad模拟器上工作,但不能在iPhone模拟器或Swift 4中的真实设备上使用
class DefineRoomPropertiesVC: UIViewController {
//MARK: - Init.
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
setupTopMenuBar()
setupViews()
topMenuCollectionView.dragDelegate = self
}
fileprivate let topMenuCollectionView: TopMenuBarCollectionView = {
let layout = UICollectionViewFlowLayout()
let collectionView = TopMenuBarCollectionView(frame: .zero, collectionViewLayout: layout)
return collectionView
}()
}
extension DefineRoomPropertiesVC: UICollectionViewDragDelegate {
func collectionView(_ collectionView: UICollectionView, itemsForBeginning session: UIDragSession, at indexPath: IndexPath) -> [UIDragItem] { // called when a drag is initiated.
let image = topMenuCollectionView.imagesForTopSectionCell[indexPath.item]
let itemProvider = NSItemProvider(object: image)
let dragItem = UIDragItem(itemProvider: itemProvider)
return [dragItem]
}
func collectionView(_ collectionView: UICollectionView, dragPreviewParametersForItemAt indexPath: IndexPath) -> UIDragPreviewParameters? {
return nil
}
答
也许你忘了执行一些委托的方法。这里是伟大的教程:Coding for iOS 11: How to drag & drop into collections & tables
确保您设置dragInteractionEnabled标志真正
collectionView.dragInteractionEnabled = true