Длительное нажатие жеста лист действия удалить ячейку

Я пытаюсь закодировать длинный жест нажатия на ячейку в представлении коллекции, но я не нашел ничего похожего... Я полагаю, я делаю что-то, чтобы закодировать что-то в didSelectItemAt. Теперь работает, только если я коснусь первой ячейки... А потом я нашел в Интернете другое решение, основанное на Swift 3.

Каждый помогите мне, пожалуйста? Спасибо вам большое!

Изображение показывает, когда долго нажимаешь на первую ячейку листа действий. Но не работай, когда я нажимаю на другую клетку...

import UIKit

    class RecipeCollViewController: UICollectionViewController, UITextFieldDelegate
    {
        struct Storyboard
        {
            static let leftAndRightPaddings: CGFloat = 2.0
            static let numberOfItemsPerRow: CGFloat = 2.0
        }

    override func viewDidLoad() {
        super.viewDidLoad()

        RecipeDataManager.shared.recipeController = self

        title = loc("TITLE_RECIPECOLL")

        navigationController?.navigationBar.prefersLargeTitles = true

        let collectionViewWidth = collectionView?.frame.width
        let itemWidth = (collectionViewWidth! -  Storyboard.leftAndRightPaddings) / Storyboard.numberOfItemsPerRow

        let layout = collectionViewLayout as! UICollectionViewFlowLayout
        layout.itemSize = CGSize(width: itemWidth, height: 250)
    }

    override func numberOfSections(in collectionView: UICollectionView) -> Int
    {
        return 1
    }

    override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
    {
        return RecipeDataManager.shared.recipes.count
    }

    override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
    {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "RecipeCell", for: indexPath) as! RecipeViewCell
        let recipe = RecipeDataManager.shared.recipes[indexPath.item]

        cell.labelNameRecipe.text = recipe.titleRecipe
        cell.imageViewRecipe.image = recipe.imageRecipe
        cell.labelPrepareTime.text = String(recipe.recipeTimeInt)
        cell.labelPeopleFor.text = recipe.peopleRecipe

        return cell
    }

    override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)
    {

    }


    // MARK: - NAVIGAZIONE
    // Metodo che scatta quando l'utente tocca una delle celle della collectionView e apre il dettaglio
    override func prepare(for segue: UIStoryboardSegue, sender: Any?)
    {
        if segue.identifier == "RecipeDetail"
        {
            if let indexPath = self.collectionView!.indexPathsForSelectedItems?.first
            {
                let recipeDetailVC = segue.destination as! DetailRecipeViewController
                recipeDetailVC.recipe = RecipeDataManager.shared.recipes[indexPath.item]
            }
        }
    }

// MARK: - UILongPressGestureRecognizer function for the cell recipe

@IBAction func popUpActionCell(longPressGesture : UILongPressGestureRecognizer)
{
    let alertActionCell = UIAlertController(title: "Action Recipe Cell", message: "Choose an action for the selected recipe", preferredStyle: .actionSheet)

    // Configure Remove Item Action
    let deleteAction = UIAlertAction(title: "Delete", style: .destructive, handler: { action in

        // Delete selected Cell
        let deleteRecipe: [RecipeDataManager] = []
        if let indexPath = self.collectionView?.indexPathsForSelectedItems?.first
        {
            RecipeDataManager.shared.recipes.remove(at: indexPath.item)
            RecipeDataManager.shared.salva()
            self.collectionView?.deleteItems(at: [indexPath])
        }

        print("Cell Removed")
    })

    // Configure Cancel Action Sheet
    let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: { acion in
        print("Cancel actionsheet")
    })

    alertActionCell.addAction(deleteAction)
    alertActionCell.addAction(cancelAction)
    self.present(alertActionCell, animated: true, completion: nil)

    self.collectionView!.reloadData()
}


}

1 ответ

С моими удовольствиями я нашел окончательное решение моей проблемы. Опубликовать код для других новых разработчиков нуждается в помощи!

        // MARK: - Long Press Gesture Action Sheet
    @IBAction func popUpActionCell(longPressGesture : UILongPressGestureRecognizer)
    {
        // Delete selected Cell
        let point = longPressGesture.location(in: self.collectionView)
        let indexPath = self.collectionView?.indexPathForItem(at: point)
//        let cell = self.collectionView?.cellForItem(at: indexPath!)
        if indexPath != nil
        {
            let alertActionCell = UIAlertController(title: "Action Recipe Cell", message: "Choose an action for the selected recipe", preferredStyle: .actionSheet)

            // Configure Remove Item Action
            let deleteAction = UIAlertAction(title: "Delete", style: .destructive, handler: { action in
                RecipeDataManager.shared.recipes.remove(at: indexPath!.row)
                print("Cell Removed")
                self.collectionView!.reloadData()
            })

            // Configure Cancel Action Sheet
            let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: { acion in
                print("Cancel actionsheet")
            })

            alertActionCell.addAction(deleteAction)
            alertActionCell.addAction(cancelAction)
            self.present(alertActionCell, animated: true, completion: nil)

        }
    }
Другие вопросы по тегам