Bouton de UITableViewCell ne répond pas sous ios 7
J'ai une tableview et chaque cellule contient un bouton. Ça fonctionne assez bien toutes les versions d'iOS mais 7. Je ne sais pas ce qu'il se passe. La cellule est construite dans un fichier xib.
Quelqu'un pourrait-il me donner des suggestions? Merci à l'avance.
- Eu le même problème tout à l'heure. Résolu en vous assurant que le bouton est ajouté à la vue de contenu (ie. [auto.contentView addSubview:bouton]), ce qui semble avoir changé entre iOS6 et iOS7. FWIW, je pense que la question est assez clair. Le seul code que je peux penser à ajouter, c'est tout le générique UITableView choses.
- Fatigué de gars de mettre les choses, sans même essayer de comprendre la chose. J'ai le même problème et il est assez évident une fois que vous l'expérience! Aucun code n'est requis. Vraiment la modification de rupture dans iOS7.
- salut les gars, en face d'un même problème, je suis à l'aide personnalisée plume pour les cellules et soudain, ils sont tous pas interactif dans ios7.. la moindre idée?
- pouvez-vous le mettre sur github ?
- Peut-être vous avez besoin pour créer des classes de la cellule et ajoutez le tout dans la vue de contenu ratherthen XIB. c'était un travail pour moi.. pas de XIB besoin usr [self.ContentView addSubView:yourbutton]
- J'ai exactement le même bouton. Les 2 réponses ne répondent pas cela pour moi. Les boutons sont des sous-vues de sous-vues de l'auto.Contentview.
Vous devez vous connecter pour publier un commentaire.
Ce qui a fonctionné pour moi, c'est ceci:
appelé après le chargement de ma cellule personnalisé de plume. Il ressemble à ceci l'affichage du contenu est créé et défini comme un niveau supérieur de l'enfant vue après la création de points de vue définis dans le fichier nib.
Appel
[cell bringSubviewToFront:button]
après le chargement de la cellule à partir de plume résolu pour moi.contentView
sous-vue qui répond à la cellule de la touche. Si ce point de vue est overtop de votre bouton, il recevra la touche au lieu de la touche.bringSubviewToFront
assure que votre bouton est en haut de la pile de vues.J'ai aussi été aux prises avec ce problème et j'ai fait beaucoup de recherche sur les différentes réponses sur stackoverflow et sur internet, la solution est différente selon la source du problème. Pour la plupart des cas, vous devez effectuer les opérations suivantes avec l'élément qui est censé prendre action de l'utilisateur (appuyez/cliquez sur etc.):
myButton.userInteractionEnabled = YES;
En particulier pour les UILabel/UIImageView, par défaut, le
userInteractionEnabled
drapeau estNO
.Si vous êtes le chargement de la vue à partir d'un xib, vous devez vous assurer que, à partir de la cellule personnalisé de vue, le contenu de la vue, et l'élément que vous voulez l'action de l'utilisateur est activée, tous ont la case cochée:
Dans l'exemple ci-dessus, DeviceViewCell, d'Affichage de Contenu et Bouton élément tous ont "Interaction de l'Utilisateur Activé" case à cocher activée.
Si la cellule personnalisé est mis en œuvre comme une sous-classe de UITableViewCell, et la coutume vue sur les cellules est chargé à partir d'un autre fichier xib de façon dynamique, vous AVEZ À FAIRE une chose de plus qui est source de confusion pour la plupart des gens, mais je vais vous expliquer pourquoi plus tard:
Dans la cellule personnalisé de la méthode d'initialisation, vous devez effectuer les opérations suivantes:
self.contentView.userInteractionEnabled = NO
où
self
est la sous-classe de UITableViewCell vous avez créé. Encore une fois, SI la cellule personnalisé est mis en œuvre comme une sous-classe de UITableViewCell, et la coutume vue sur les cellules est chargé à partir d'un autre fichier xib DYNAMIQUEMENT, vous devez faire ce qui précède. Voici l'explication:self.contentView
n'est PAS la mêmeContent View
vous voir dans Interface Builder, il est créé par le système comme étant ladefault content view
qui est au-DESSUS de tous les autres points de vue et les éléments au sein de votre cellule personnalisé de vue, et elle occulte le reste de vues dans le point de vue de la hiérarchie. Par conséquent, vous aurez besoin de désactiver l'interaction de l'utilisateur pour les éléments d'INTERFACE utilisateur dans la cellule personnalisé vue peut recevoir de l'interaction de l'utilisateur des événements. Espérons que cette aide. Si vous avez une meilleure explication que j'aimerais l'entendre :-). De nouveau est est de mon observation et il pourrait y avoir d'autres raisons. La Discussion est la bienvenue!self.contentView
. Qui a été la cause de racine.Le problème, c'est que votre plume est ne contenant pas d'un contentView, comme l'exige depuis l'iOS 8 SDK (je suis en train d'écrire par l'expérience, n'ont pas une source viable, désolé).
Lorsque vous ajoutez un
UITableViewController
à un story-board, un UITableViewCell est ajouté à laUITableView
automatiquement. Si vous jetez un oeil à cetteUITableView
, vous verrez uncontentView
en elle.Ainsi, lorsque vous sous-classe d'une
UITableViewCell
et de le créer avec un .xib, vous aurez à cliquez sur&faites glisser unUITableViewCell
à la xib au lieu de la valeur par défautUIView
. Alors n'oubliez pas de mettre le Propriétaire du Fichier de la classe et de laUITableViewCell
classe à votre sous-classe.J'ai connu le même problème. Il s'avère que j'avais créé une UIView objet de l'IB et puis il est classe sous-classe de UITableViewCell.
Depuis l'objet que je créé à l'origine de l'IB a été une UIView, le UITableViewCell contentView n'ai pas ajouté jusqu'à l'exécution, ce qui est arrivé à être sur le dessus de mon UIButtons les rendant non sélectionnable.
Clairement, il y a un certain nombre de choses qui peuvent mal se passer et quelques corrections de travailler sur certaines versions iOS et pas sur d'autres.
Mon problème était que j'avais un UIButton qui n'était pas immédiatement une sous-vue de la cellule.contentView (c'est à dire qu'il était une sous-vue d'une sous-vue). J'ai dû ajouter ma touche directement à la cellule.contentView pour être tappable. (iOS v8+)
La solution à ce problème est;
Cela fonctionne pour moi.
Dans mon cas, tout ce que je voudrais à l'utilisateur d'interagir avec l'extérieur de la ContentView. Aussi je ne veux pas que la cellule soit mis en surbrillance lorsqu'il est sélectionné.
Toutes les étiquettes (Nom, Catégories, etc.) sont immédiatement sous la rubrique "Contenu de la Vue". Le WebsiteButton n'est pas sous "Affichage du Contenu", mais il est dans "Répertoire Local Cellule de Tableau".
Dans mon tableViewController méthode tableView:cellForRowAtIndexPath: j'ai le code suivant:
cellule.contentView.userInteractionEnabled = NON;
C'est tout et que l'utilisateur est en mesure d'interagir avec le bouton.
Je n'utilise PAS [cellule bringSubviewToFront:de la cellule.websiteButton];
Comme d'autres l'ont souligné, toujours ajouter des sous-vues de la cellule d'affichage de contenu. Si vous avez remplacé
layoutSubviews
méthode, assurez-vous d'appeler la super mise en œuvre. Oublier d'appeler la super mise en œuvre des rendements des résultats inattendus.J'ai eu le même problème avec un UIButton dans un prototype de cellule dans mon storyboard. Je l'ai résolu en cochant "l'Interaction de l'Utilisateur Activé" sur le prototype de la cellule. Cela a fonctionné sur iOS 7.1.
J'ai été d'obtenir le même problème. La raison en est
est toujours 44.
Il y a une suggestion, vous pouvez configurer votre
self.contentView.Frame
àself.frame
à la réécriture de la méthode(void)layoutSubviews
le problème sera résoluLa plus évidente erreur, je n'ai pas vu décrite ici est que vous DEVEZ avoir un selectedBackgroundImage pour un UIButton autre allure lorsqu'il est sélectionné. Ce ne sont pas, comme, par exemple, UITableViewCells.
J'ai fait face à un problème similaire sur les deux UITableViewCell et UICollectionViewCell. Quelques étapes à suivre:
En bref,
TableView/CollectionView les cellules ne peuvent pas prendre exploitables sous-vues (UIButton, UISegmentedControl) qui sont mise en page automatique est activé. Si vous avez un besoin, soit désactiver l'auto-mises en page et de fournir des images (ou) les mettre dans un conteneur de vue (Conteneur doivent avoir mise en page automatique désactivé) et ajouter les informations vues (avec mise en page automatique) comme des sous-vues pour le conteneur de vue.
Dans mon cas, j'ai besoin de vérifier l "Interaction de l'Utilisateur Activé" pour la cellule elle-même (et pas seulement de la contentView) ainsi. Mais comme il est noté dans d'autres réponses, il pourrait y avoir plusieurs raisons pour expliquer ce qui se passe donc je suis sûr que cela ne fonctionne pas pour tous les cas.
Lorsque vous utilisez l'Interface Builder (Storyboard), alors assurez-vous de vérifier la
User Interaction Enabled
case à cocher de laContent View
Aucune de ces réponses a fonctionné pour moi.
La seule façon que j'ai été en mesure de résoudre ce problème est de mettre la table de sélection de cellule de la single à aucun. Après, j'ai été en mesure de recevoir bouton de rappel.
Ok, j'ai trouvé une solution à ce problème, mais il semble être un énorme hack; cependant, il est tout ce que j'étais en mesure de venir avec (rien d'autre ici a fonctionné pour moi).
Overtop de mon
button
j'ai ajouté un UITextField qui délègue à la vue de la table de la cellule en question. Que tableViewCell exemple implémente-(BOOL) textFieldShouldBeginEditing:(UITextField *)textField
et retourneNO
.Filaire assez, le fait pour moi, la solution est d'aller à un scénarimage, sélectionnez le contentview dans la cellule, et cocher la case "userInteractionEnabled"... sinon, même si vous avez activé userInteraction sur le bouton ou de la cellule, contentview toujours bloquer l'action.
J'avais vue transparente sur cette cellule qui a mis en place certaines fonctionnalités internes et traitées sur la touche auto.
J'ai tout vérifié, mais j'ai fait stupide erreur de storyboard mon bouton de superview était en dessous d'un autre point de vue. le toucher n'était pas en passant à mon bouton.