J'ai un UICollectionView et chaque cellule a un UITextView. J'essaie de rendre possible la suppression de la cellule entière en appuyant longuement sur le texte dans un TextView et en sélectionnant Supprimer dans le menu contextuel.

Je sais que je peux remplacer Supprimer en remplaçant

func delete(_ sender: Any?) {//I want to delete cell from here}

Et

override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
    if action == #selector(delete(_:))
    {
        return true
    }
    return super.canPerformAction(action, withSender: sender)
}

Je ne sais tout simplement pas comment trouver la cellule actuelle dans laquelle je me trouve.

0
Edric Chen 24 janv. 2017 à 11:02

4 réponses

Meilleure réponse

Solution Swift 3: Donc, certaines personnes étaient proches, mais tout le monde m'a presque conduit sur la bonne voie. La solution ne répond pas exactement à ma question, mais elle pourrait être combinée avec un gesturerecognizer pour répondre spécifiquement à la question.

Donc, ma solution est basée sur la façon dont mon code est formaté et peut avoir besoin d'être modifié pour quelqu'un d'autre.

Premièrement: à partir de la sous-classe UICollectionViewCell, où ma vue textuelle est bien sûr implémentée, j'ai remplacé la fonction de suppression intégrée. De là est créée une variable qui est instanciée avec avec les cellules superview, qui est un UICollectionView. Cela me permet d'obtenir l'indexPath de la cellule. De là, je crée également une variable qui est instanciée avec l'UIView pour l'emplacement de mon UICollectionView. À partir de là, j'ai créé une fonction dans mon UIView qui prend un IndexPath et supprime la cellule.

À l'intérieur de UICollectionViewCell:

override func delete(_ sender: Any?) {
    let cv = self.superview as! UICollectionView
    let indexPath = cv.indexPath(for: self)
    let view = self.superview?.superview as! UIView
    view.delCell(indexPath!)
}

À l'intérieur de UIView:

func delCell(indexPath: IndexPath) {/*code for cell removal here*/}
0
Edric Chen 7 févr. 2017 à 09:49

Dans votre func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell, définissez indexPath.row comme balise de votre UITextView. Ensuite, dans votre appui long func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) ou UITextView, vous pouvez accéder à la balise de UITextView qui aide à trouver la cellule actuelle.

Vous pouvez accéder à la cellule actuelle en utilisant ce code:

let indexPath = IndexPath(row: textview.tag, section: 0)
let yourCell = self.collectionView.cellForItem(at: indexPath)

J'espère que cela vous aidera, Ou vous rencontrez d'autres problèmes, faites le moi savoir :)

0
anas.p 24 janv. 2017 à 11:47

Func deleteSections (IndexSet) Supprime les sections aux index spécifiés.

Func deleteItems (at: [IndexPath]) Supprime les éléments aux chemins d'index spécifiés

-1
mrabins 24 janv. 2017 à 08:12

Donnez une balise à textfield qui doit être égale à indexPath actuel lors de l'ajout d'une cellule à la vue de collection. Lorsque l'écouteur à appui long est déclenché, vérifiez la valeur de la balise et, sur cette base, procédez à l'opération.

0
Vikas Mishra 24 janv. 2017 à 12:13