从集合视图中拖动单元格可在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