7
votes

Bouton à l'intérieur de la collectionView non cliquable

J'ai un bouton dans une cellule personnalisée d'une collectionView. La collectionView est sur un ScrollView. Pour une raison quelconque, je ne suis pas capable de cliquer sur le bouton. J'ai vérifié que tous mes éléments ont une interaction utilisateur activée.

Voici ma mise en page de la collection (j'ai caché des données sensibles) Entrez la description de l'image ici p>

voici ma cellule de vue de la collection personnalisée: p> xxx pré>

J'ai un fichier XIB où une touche XIB L'événement intérieur d'un bouton a été connecté à l'ibaction ConnectButton. P>

et dans mon mode de vue: p> xxx pré>

Voici ma fonction de vue de la collection: P>

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

        let cell = myCollectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! MyCollectionViewCell
        let user = users.values[indexPath.row]
        cell.populate(user)

        cell.onConnectTap = { (cell) in
            //do something
        }

        return cell

}


7 commentaires

Est ConnectButton non appelé non plus? L'avez-vous accroché correctement dans le constructeur d'interface?


Ça n'est pas appelé, et oui, j'ai vérifié que c'est branché correctement dans IB.


Créer une méthode de déléguée de bouton


Vous devriez essayer de définir votre vision de collection et son attribut Clipstobounds Clipstobounds de Scroll Parent sur True . Étant donné que votre vue de collection est dans une vue de défilement, le dimensionnement de la vue de défilement peut être difficile et peut-être que vous pouvez voir la cellule, mais les vues parent n'ont pas la tailles de droite, qui gâchent la chaîne de réponse.


@ DirtyHenry Les deux ont déjà déjà clip aux limites définies sur TRUE dans IB.


@Prabhu et avez-vous vérifié que la tailles de la trame / du contenu des vues des deux parents était ok?


Oui ils semblent aller bien


3 Réponses :


25
votes

Après avoir cherché à l'ensemble de la bande, j'ai enfin trouvé la solution qui était dans le commentaire de cette réponse: HTTPS: // Stackoverflow.com/a/44908916/406322

J'ai besoin d'ajouter ceci dans MyCollectionviewcell: XXX

Je pense que la sélection de la cellule détournait l'événement tactile.


3 commentaires

super travaillé pour moi, après avoir essayé une journée entière cell.contentview.isuserInterActionAcédée = Faux et Public Func TextView (_ TextView: UitextView, Do URL: URL: URL, dans CaractèreRange: Nsrange) -> BOOL {IMPRESSION (URL) Retournez vrai}


Wow, c'est super obscur. Superbe retrouver!


Si cette solution a fonctionné pour vous, c'est probablement parce que dans myCollectionviewcell Vous n'ajoutez pas correctement votre bouton sous forme de sous-View (ou Sous-View d'une sous-vision) de contentview ; Vous pouvez ajouter votre bouton à la vue à la place. Donc, la solution - au lieu d'interactions désactivées sur contentview , vous devez ajouter un bouton au contenu au lieu de la vue .



0
votes

Vérifiez la structure du fichier XIB. J'ai perdu du temps avec ce problème (où le bouton de la XIB ne semblait pas répondre), car la structure avait une deuxième cellule intégrée, plutôt que d'une seule (à peu près dans mon cas).

 Entrez la description de l'image ici


0 commentaires

2
votes

Je suis confronté au même problème et j'ai trouvé la meilleure solution après avoir passé beaucoup de temps.

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let cell = myCollectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! MyCollectionViewCell

     cell.contentView.isUserInteractionEnabled = false
     return cell
}


1 commentaires

Veuillez vérifier quelle vue ou touche que vous voulez cliquer sur Assurez-vous que UserPortAction est activée ou non @Chandni