UICollectionView иногда не может перетащить ячейку, если есть свободное место - PullRequest
0 голосов
/ 16 февраля 2020

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

enter image description here

Это работает хорошо, но иногда возникает проблема: я могу ' не удаляйте тег, даже если есть свободное место.

Попытка понять, это моя проблема или 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!
}

Код очень прост, и я не могу найти никаких проблем с этим, но надеюсь, что это может помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...