Я использую новый API перетаскивания в Swift 4. Мне нужно перетащить ячейку, долго нажимая на нее и перетаскивая изображение в представление контроллера представления. Это перетаскивание в том же приложении, потому что оно должно работать на iPhone, а эта функция работает только на телефоне в том же приложении. Я использую реальное устройство для проверки того, что я пишу, и я не мог понять, почему я не могу перетащить ячейку после нажатия на нее. Но запускаю симулятор на айпаде и... работает, могу перетащить. Я просмотрел документацию Apple, и они указывают, что внешний вид элемента перетаскивания можно настроить во время перетаскивания, но по умолчанию будет перетаскиваться вся ячейка, если нет пользовательской реализации функции делегата или возвращается ноль; так что он все еще должен работать, он делает это в симуляторе на iPad, но не на смоделированных iPhone или реальном. Список кодов ниже. Может быть, кто-то уже прошел через это и знает, как мне помочь. Спасибо. Только соответствующие биты:
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
}