2017-05-29 2 views
1

J'ai un UICollectionViewController personnalisé avec un en-tête personnalisé et des cellules.Récupération des données de l'en-tête à la vue du parent

J'ai implémenté un protocole, dans lequel collecter responseView, de cette façon, je sais dans la collectionView quand un objet a été accédé (bouton presse par exemple) dans la classe d'en-tête, jusqu'ici tout va bien.

Ce que je veux le faire que lorsque je tape sur un bouton, dans le collectionView, je dois l'en-tête pour récupérer des données qu'il possède au collectionView

permet de dire que je tape sur un bouton Enregistrer dans la collectionView et pour exécuter une sauvegarde, j'ai besoin des données actuelles de l'en-tête.

Comment puis-je y parvenir?

est ici une partie du code actuel:

import UIKit 

// collection view class 
class EditUserProfileHeader: UICollectionViewCell, UITextViewDelegate { 
    var delegate: CustomHeaderDelegate? 

    //(... some default code ...) 
    override func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView { 
     let header = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: headerId, for: indexPath) as! CustomHeader 
     header.delegate = self 
     return header 
    } 

    // header delegate conform 
    func didTapPhoto() { 
     // this fires everytime the button is pressed inside the header 
     print("didTapPhoto was tapped inside the header") 
    } 


    func didTapSave() { 
     //here I need the header's data from it's labels and so on 
    } 

} 


protocol CustomHeaderDelegate { 
    func didTapPhoto() 
} 



class CustomHeader: UICollectionViewCell { 
    var delegate: CustomHeaderDelegate? 
    //(... some class regular code ...) 

    func didTapPhoto() { 
     delegate?.didTapPhoto() // here I pass to the collectionView that this button was pressed in the header 
    } 

} 

Comme vous pouvez le voir, je l'ai mis en place un délégué à chaque fois que le didTapButton se produit dans l'en-tête, j'appelle la fonction de délégué je connais dans le collectionView que le bouton a tiré.

Maintenant, j'ai besoin d'essayer le contraire; quand je tape un bouton à l'intérieur du collectionView j'ai besoin de l'en-tête pour le savoir et qu'il récupère les données désirées.

Quelqu'un peut-il me donner un coup de main? J'ai essayé d'implémenter un autre protocole pour faire le contraire mais je l'ai mal fait parce que ça ne fonctionnait pas, surtout parce que je ne pouvais pas dire dans la classe d'en-tête que le délégué du parent se conformait à ce délégué spécifique, a I fait dans le collectionView quand j'instancié l'objet d'en-tête et définir sa delegate to self

Merci

+0

marquer la question comme résolue/résolue si c'est le cas. –

Répondre

0

I réussi à accéder à l'en-tête souhaitée insérant la ligne suivante dans la fonction didTapSave()

let header = collectionView?.supplementaryView(forElementKind: UICollectionElementKindSectionHeader, at: IndexPath(item: 0, section: 0)) as? CustomHeader 

Comme cela je peux accéder aux données mises à jour en-tête.