Я реализую теги перетаскивания, используя UICollectionView
:

Это работает хорошо, но иногда возникает проблема: я могу ' не удаляйте тег, даже если есть свободное место.
Попытка понять, это моя проблема или iOS ошибка, и как ее решить?
class PlayGroundVC: UIViewController {
@IBOutlet weak var collectionView: UICollectionView!
var items = ["0","one", "two two", "three four", "five", "six seven", "eight", "nine", "ten eleven twelve"]
override func viewDidLoad() {
super.viewDidLoad()
let gesture = UILongPressGestureRecognizer(target: self, action: #selector(self.handleLongGesture(gesture:)))
gesture.minimumPressDuration = 0.05
collectionView.addGestureRecognizer(gesture)
}
@objc func handleLongGesture(gesture: UILongPressGestureRecognizer) {
switch(gesture.state) {
case .began:
guard let selectedIndexPath = collectionView.indexPathForItem(at: gesture.location(in: collectionView)) else {
break
}
collectionView.beginInteractiveMovementForItem(at: selectedIndexPath)
case .changed:
collectionView.updateInteractiveMovementTargetPosition(gesture.location(in: gesture.view!))
case .ended:
collectionView.endInteractiveMovement()
collectionView.reloadData()
default:
collectionView.cancelInteractiveMovement()
}
}
}
extension PlayGroundVC: UICollectionViewDataSource, UICollectionViewDelegate {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return items.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "WordCell", for: indexPath as IndexPath) as! WordCell
cell.label.text = self.items[indexPath.item]
return cell
}
func collectionView(_ collectionView: UICollectionView, moveItemAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) {
let item = items[sourceIndexPath.row]
items.remove(at: sourceIndexPath.row)
items.insert(item, at: destinationIndexPath.row)
}
}
class WordCell: UICollectionViewCell {
@IBOutlet weak var label: UILabel!
}
Код очень прост, и я не могу найти никаких проблем с этим, но надеюсь, что это может помочь.